AsyncTaskクラス

android.osAsyncTaskクラス

AsyncTask

 状態:学習中  閲覧数:1,753  投稿日:2013-09-27  更新日:2014-02-12  
・スレッドを作成して非同期処理を扱う
・Android 3.0までは、Android SDKで提供されるこのクラスを直接利用するのが一般的だった
※Android 3.0以降は非同期処理をより汎用的に扱うため、非同期にデータを読み込むための「抽象クラスLoader」という仕組みが追加された

2つの機能を提供するクラス
1.別スレッドでのバックグラウンド処理
2.処理前と処理後のUI threadへのコールバック
同時に1つのことしかできない、と言う欠点を補うクラス

利用用途
・非同期処理
・UIスレッドを使った非同期処理を簡単に実装

利用例
・データベース問い合わせ等の比較的重たい処理を、UI threadに負荷を与えずに行う

使用方法
・AsyncTaskのサブクラスを実装

クラス構成

 閲覧数:357 投稿日:2013-09-27 更新日:2014-02-02 

親クラス



java.lang.Object
  ↳ android.os.AsyncTask<Params, Progress, Result>



使い方

 閲覧数:399 投稿日:2013-10-01 更新日:2014-01-01 

1.クラス作成


AsyncTaskクラスを継承したクラスを作成
・実型第1引数 … Params
・実型第2引数 … Progress
・実型第3引数 … Result


2.メソッド実装


・onPreExecute
・doInBackground
・onProgressUpdate
・onPostExecute


3.タスク作成・タスク開始


・メインスレッドで、作成したクラスのインスタンスを作り起動
・「execute」メソッドで呼び出す … 可変長引数
    			DataLoadTask task = new DataLoadTask();
    task.execute();


1.クラス作成

 閲覧数:453 投稿日:2013-10-02 更新日:2014-01-01 

AsyncTaskクラスを継承


AsyncTaskクラスを継承したクラスを作成
・Generics指定(引数の型を指定)
public class DataLoadTask extends AsyncTask<Object, Integer, List<RecordItem>> {


実型第1引数 … Params
・実行時引数
・スレッドを開始(バックグラウンド処理を実行)する時に、メインスレッド(UIスレッド)から渡す引数の型。(doInBackgroundメソッドの引数)
・AsyncTaskを実行開始するexecute()メソッドの引数として渡したものが、doInBackgroundメソッドのparamsとして渡される

実型第2引数 … Progress
・進捗単位
・進捗率を表示させるときに使う型。(onProgressUpdateメソッドの引数)

実型第3引数 … Result
・処理結果
・スレッド終了時に値を返す時の型(戻り値)。(onPostExecuteの引数・doInBackgroundの返り値)

2.メソッド実装

 閲覧数:404 投稿日:2013-10-02 更新日:2013-12-31 

処理の流れ


・doInBackgroundで非同期処理をして取得した情報はResult型に詰め込まれる
・それをonPostExecute()で受け取り、UIに反映させる


メソッド一覧


onPreExecute
・タスク開始直後に呼ばれる
・何か初期化したいことがあればここでする
	@Override
protected void onPreExecute() {
/* 処理中ダイアログ表示(プログレスダイアログを初期化して表示) */
progressDialog = new ProgressDialog(ActivityTop.this);


doInBackground … 可変長引数
・メイン処理(=バックグラウンドで非同期に実行させたい処理)
※ここで、UI threadに関わる処理を記述すると、実行時にエラーとなるので注意が必要
		@Override
protected List<RecordItem> doInBackground(Object... params) { // 可変長引数
           /* 一覧を呼び出し */
RecordDaoItem dao = new RecordDaoItem(ActivityTop.this);

return dao.list_search_item( Record ,isWordSearch );
}


onProgressUpdate
・バックグラウンド処理の進捗具合(プログレスバー)を、メインスレッド(UIスレッド)で表示させたい場合、ここに処理を書く
※※doInBackground()で、publishProgress()が呼ばれた場合に処理される

onPostExecute
・doInBackground()の実行が終わると呼び出される
・バックグラウンド処理が終了し、メインスレッドに反映させる処理をここに書く
・「完了!」とかTextViewなどに表示させたい場合はここに記述
※引数resultは、先のdoInBackground()でreturnしたオブジェクト
		protected void onPostExecute(List<RecordItem> result) {
/* 処理中ダイアログをクローズ */
progressDialog.dismiss();


3.タスク作成・タスク開始

 閲覧数:394 投稿日:2013-10-02 更新日:2013-10-02 

インスタンス作成&起動


・メインスレッドで、作成したクラスのインスタンスを作り起動
		DataLoadTask task = new DataLoadTask();/*作成したクラスのインスタンスを作る*/
task.execute();/*起動*/



コメント投稿(ログインが必要)