Skip to content
This repository has been archived by the owner on Jun 20, 2023. It is now read-only.

2.08. 非同期処理

KeithYokoma edited this page May 3, 2013 · 20 revisions

この章では、Android での非同期処理について解説します。

Service

Service とは、バックグラウンドで動作する Android のコンポーネントです。

サービスの状態

サービスには、その呼び出し方によって 2 つのいずれかの状態をとります。

開始

Context#startService(Intent)によって呼び出された時の状態です。

バインド

Context#bindService(Intent)によって呼び出された時の状態です。

Service

一般的な Service を作成するひな形クラスです。
バックグラウンドで動作するものではありますが、その実動作しているスレッドは、Service を動かしているプロセスのメインスレッドです。
つまり、Service 内でブロックする処理を記述すると、メインスレッドの処理がブロックします。よって、独自のプロセスで動かしたい場合は、その旨 AndroidManifest で宣言する必要があり、また、ブロックする処理を実行する場合は、自分でスレッドを新しく立てる必要があります。

IntentService

Intent による呼び出しで開始される Service であり、かつ、Service の開始要求を 1 つずつ順に処理するワーカスレッド上で動作する特別な Service です。 一度に複数の処理を並列して行う必要がない場合は、IntentService を利用するほうが実装が簡単です。

Loader

AsyncTaskLoader

CursorLoader

AsyncTask

名前の通り、非同期処理のためのクラスです。
非同期に実行したい処理と、処理前、処理後のメインスレッド上での処理を記述するため、このクラスを継承して使います。

AsyncTask では、内部でスレッドプールを持っています(Donut までは単一のスレッドで動作していた)。
デフォルトでは 5 つのスレッドがプールされており、内部で並列して複数の非同期処理を実行できるようになっています(Honeycomb 以降は、スレッドの並列実行における諸問題を回避するため単一スレッドで動作するように戻っている)。
最大でプールされるスレッド数は 128 です。

GitHub Pagesへ移行しましたmixi-inc.github.ioへお願いします。

Clone this wiki locally