「Androidアプリのバックグラウンド処理」の版間の差分

提供: Java入門
移動: 案内検索
(ページの作成:「Androidアプリには、バックグランド処理を実現する方法がいくつかあります。Thread, AsyncTask, Service, BroadcastReceiver などです。 '''...」)
 
(相違点なし)

2015年9月6日 (日) 18:40時点における最新版

Androidアプリには、バックグランド処理を実現する方法がいくつかあります。Thread, AsyncTask, Service, BroadcastReceiver などです。

読み方

Thread
すれっど
AsyncTask
あしんく たすく
Service
さーびす
BroadcastReceiver
ぶろーどきゃすと れしーばー

概要

Androidアプリでは、以下のバックグランド処理があります。

Thread
スレッド
AsyncTask
非同期タスク
Service
サービス
BroadcastReceiver
レシーバ

Thread

Thread(スレッド)は、単なるスレッドです。Threadは、直接 UI にアクセス(変更)できません。UIは、単一のスレッド管理しているため、デレゲートの処理が必要になります。

ソースコード

AsyncTask

AsyncTaskは、スレッドを利用したバックグランド処理を実現します。 AsyncTaskは、UIスレッドに適切で簡単な利用を実現します。AsyncTaskクラスは、バックグラウンド処理や Thread や Handler の操作なしに UIスレッドへ結果を出すことができます。

AsyncTaskは、 Thread や Handler などのクラスのヘルパークラスとしてデザインされています。汎用のスレッディングフレームワークの構成する必要はありません。 AsyncTask は、理想的には、短いオペレーション(せいぜい数秒のタスク)のためだけに使われるべきです。もし、長い期間のスレッドの実行を必要とする場合は、 Executor, ThreadPoolExecutor や FutureTask などの java.util.concurrent パッケージ で提供される様々なAPIの利用を強く推奨します。

以下のコードは、developer.android.com からの引用です。

 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }
 
     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }
 
     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

以下のように利用できます。

new DownloadFilesTask().execute(url1, url2, url3);

Service

Android の Service

関連項目