2012/02/23

LoaderManager.LoaderCallbacksインタフェースのAPIまとめ

LoaderはAndroid3.0より追加された機能です。

LoaderCallbacksはクライアントがLoaderManagerと双方向にやり取りするためのコール
バックインターフェイスです。
例えば、onCreateLoader()コールバックメソッドはLoaderManagerからのLoader生成の要
求で、ここでLoaderをインスタンス化して新しいローダを返します。

このコールバックはActivity/FragmentがLoaderManager経由でLoaderを使用する場合に
必要です。各コールバックはメインスレッドで実行される必要があります。

●onCreateLoader(id, args)
  • LoaderManagerから指定されたIDに紐付くLoaderインスタンスの生成要求です。
    ここで、データのロード準備ができたLoaderインスタンスを返却します。


●onLoadFinished(loader, data)
  • Loaderのデータロード完了通知です。
  • このコールバックはActivity.onSaveInstanceState()より後に呼ばれる可能性があるこ
    とに注意してください。
    例えば、このメソッド内でFragmentTransactionのコミットを行うと例外が発生します。
    ※FragmentManager.openTransactionについて
     http://developer.android.com/intl/ja/reference/android/app/FragmentManager.html
  • このコールバックはLoaderの持つデータが解放される前に呼び出されます。
    この時点で使用している古いデータは削除すべきですが、Loaderがそのデータを管理
    しているため、ここでデータを解放してはいけません(Cursorのclose等)
  • Loaderはアプリケーションがそのデータを使用しないと分かると自動で削除・解放して
    くれます。CursorAdapterとLoaderを併用している場合、CursorAdapter.changeCursor(cursor)メソッドは既存のcorsorをクローズしようとするので注意が必要です。
  • Adapterに紐付くカーソルの更新は、これをcloseしないswapCursor(Cursor)を使用する
    必要があります。mAdapter.swapCursor(data)がその例です。
  • ※swapCursorについて
     http://developer.android.com/reference/android/widget/CursorAdapter.html#swapCursor(android.database.Cursor)
  • ※サンプルプログラム
     http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html


●onLoaderReset(loader)
  • 作成したLoaderのリセット通知です。これによりロードしたデータが使用できなくなります。
    アプリケーションはこのタイミングで必要なデータ参照の削除を行います。
    mAdapter.swapCursor(null);がその例です。


以上です。