2012/02/25

AsyncTaskLoaderのまとめ


■AsyncTaskLoaderの概要

AsyncTaskを提供する抽象的なLoaderです。
AsyncTaskLoaderはWorkerとしてのAsyncTask(ロードタスク)を内部にもつLoaderです。

AsyncTaskLoaderを継承した実装サンプルは下記のページにあります。
http://developer.android.com/intl/ja/resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCustom.html

CursorLoaderはAsyncTaskLoaderを継承したクラスとなります。
http://developer.android.com/reference/android/content/CursorLoader.html

LoaderとLoaderManagerについての詳細は下記を参照
http://yuki312.blogspot.com/2012/02/loadermanager.html
http://yuki312.blogspot.com/2012/02/loadermanagerloadercallbacks.html
http://yuki312.blogspot.com/2012/02/loader.html

AsyncTaskLoaderはThrottle機能を提供します。
Throttleは連続でクエリ発行された際の実行頻度を調整する弁の役割を持ちます。
Throttleを使用した簡単なサンプルは下記です。
http://developer.android.com/intl/ja/resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html


■AsyncTaskLoaderの主なメソッド群
●onLoadInBackground()
  • ローダタスクのワーカースレッド上から呼び出されます。
    ワーカースレッド上で実行されるonLoadInBackgroundから直接、結果データをクライア
    ントへ返却すべきではありません。
    結果の返却はメインスレッド上で呼び出されるdeliverResult()内で行います。
    メインスレッドに結果を返却したい場合はdeliverResultをオーバーライドすることで
    それが可能になります。
  • onLoadInBackgroundはロード処理の結果を返す必要があります。
  • onLoadInBackgroundは、サブクラスレスポンスのためにloadInBackgroundをコールします。


●loadInBackground()
  • onLoadInBackground()を参照


●cancelLoad()
  • 現在のロードタスクをキャンセルしようとします。
    詳細についてはAsyncTask.cancel(boolean)を参照。
    http://developer.android.com/reference/android/os/AsyncTask.html#cancel(boolean)
  • ロードタスクはバックグラウンドで動作しているため、キャンセル操作は即時反映され
    ません。AsyncTaskのそれと同じです。
  • 実行中のロードタスクの場合、この要求によってロードがキャンセルされます。
    もし、ロード中に他のロード要求があったとしてもロードが完了するまで保持されます。
  • ローダタスクの処理が完了すると、タスクの状態はクリアされます。
  • ロードをキャンセルできなかった場合はfalseを返します。
    ロードが既に完了していた、あるいは、まだstartLoadingがコールされていない場合で
    もfalseを返します。
  • このメソッドは常にメインスレッドから実行する必要があります。


●onCanceled()
  • ローダタスクがそのタスクを完了する前にキャンセルされた場合にコールされます。
    ここでキャンセルされたタスクに関係するデータを破棄することができます。


●setUpdateThrottle()
  • Throttleはクエリ発行頻度を調整する為の弁の役割を持ちます。
  • 引数delayMSは発行頻度を決めるミリ秒単位の調整値です。
    タスクの完了(onLoadInBackground)から次のローダタスクが開始されるまでの最小の
    待ち時間を指定できます。



■AsyncTaskLoaderを継承したLoaderCustomのシーケンス
AsyncTaskLoaderを継承した例としてLoaderCustomが参考になります。
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCustom.html

下記はLoaderCustomのクライアントとLoaderManagerとの連携部分のシーケンス図となります。

1.タスクロードの開始まで(表示拡大

2.タスクロードの完了から通知まで(表示拡大

3.タスクロードの完了から通知まで(表示拡大



■AsyncTaskLoaderの状態遷移
AsyncTaskLoaderの状態遷移は通常下記になります。
AsyncTaskLoaderの開始前はReset状態となります。
状態遷移はユーザのAsyncTaskLoaderの拡張方法次第で変化し得ることに注意が必要です。



以上です。