●Activity.getLoaderManager
- 複数のLoaderを管理するLoaderManagerのインスタンスを取得します。
LoaderManagerは各Activity/Fragment毎に1つ割り当てられ、何度getLoaderManager
をコールしても同じLoaderManagerインスタンスが返却されます。
Activity/Fragmentのインスタンスが異なれば返却されるLoaderManagerのインスタンス
は異なるので、LoaderのID重複を心配する必要はありません。 - LoaderManagerはgetLoaderManagerメソッドの初回コール時に生成されます。
- LoaderManagerのライフサイクルはActivity/Fragmentにより管理され、
そのライフサイクルはActivity/FragmentのonStart時に開始されます。
ただし、onStart時にLoaderManagerが初期化されていない(つまりgetLoaderManagerが
まだ呼ばれていない)時はLoaderManagerは正しく動作しません。 - getLoaderManagerメソッドは遅くともActivity/Fragment.onStartより前にコールしていな
いと、LoaderManagerがLoaderを正しく管理してくれません。
# 画面回転時等のLoaderManager.onRetainで内部エラーが発生し、期待通りに動作しなく
# なります。
●LoaderManager.initLoader
- 指定したIDでLoaderを初期化・生成します。
ここで指定するIDはLoaderの識別子として使用され、Loaderが作成される時は
Loader.onCreateLoaderがコールバックされます。
initLoaderは指定のLoaderが初期化されることを保証します。 - 指定したIDに紐づくLoaderがすでに存在している場合、Loaderは初期化されません。
ただし、Loaderへのコールバックが指定されたインスタンスで上書きされます。
この時、引数のargsは無視されます。 - initLoaderは関連するActivity/Fragmentの生成時(Activity.onCreate/Fragment.onCreateActivity)
に使用されるべきメソッドです。 - LoaderManagerはconfiguration changeによって破棄・生成されず再利用されます。
LoaderManagerは既に存在するLoaderの再利用を可能としています。
そのため、Activityがconfiguration changeにより再生成されてonCreateでinitLoaderを
コールしても、対象のLoaderをLoaderManagerが既に保持しているのでLoaderを生成する
onCreateLoaderが再度呼ばれることはありません。 - 注意しなければならないのは、Loaderが再利用される場合は引数argsは無視されるということです。
●LoaderManager.restartLoader
- 引数のIDに関連付けられているLoaderを再生成します。
既存のLoaderは必要に応じてキャンセル/停止/破棄されます。
生成されるLoaderは引数argsを持つ新たなLoaderとして生成されます。 - # # # # 下記詳細不明 (Loaderが実行中か、実行済みかでLoaderを制御している模様)
ただし、指定のIDに紐づくLoaderが複数作成されていて、まだそれが満了していない場合、
新たにLoaderを作成しても、既存のLoaderが満了するまでこれを起動できません。 - restartLoaderで指定したIDに紐づく過去のLoaderは無効となり、それらのLoaderの
コールバックは以降通知されなくなります。
●LoaderManager.destroyLoader
- 引数のIDに紐づいたLoaderを停止・破棄します。
- 破棄対象のLoaderがデータをユーザへ通知していた場合は、onLoadFinished→
onLoaderResetがコールされます。
以上です。