掲題の件で丸2日近くつまづいた。

一般的に上記が発生するのは、「ローダーのコールバックオブジェクトが死んでいる」パターン。
こちらであれば非常にわかりやすい。

ただし、今回は別の原因で発生してドハマりした。

原因は、LoaderManagerオブジェクトにあった。
具体的には、MainActivityでgetLoaderManager()したオブジェクトをアプリ内で使い回ししようとしたのだが、
こいつは取得元のActivity(この場合はMainActivity)が非アクティブになると正常に動かないようだ。

エラーも何も出ないため、非常にタチが悪い。
(単純にバッドノウハウではあると思うが・・・

ということで、Activityが切り替わった時は必ずLoaderManagerをそのActivityから取得して使うべし。

—–

【追記】
そもそもLoaderManagerとライフサイクルの理解に問題があったことに気付いた。
LoaderManagerを扱うにあたって超重要な2つのポイントは、

・ActivityまたはFragment1つにつき、1つのLoaderManagerが生成される。
 ※つまり、Activity/Fragmentをまたいでの使い回しはNG

・Activity.onStart()が実行される前にgetLoaderManager()をコールし、LoaderManagerの初期化を行う必要がある。
 ※つまり、onResume()とかで初めてgetLoaderManager()を呼ぶと予期せぬ動作が発生する

これらを守らないと、エラーは何も出ていないのにonLoadFinished()が呼ばれない、という切なさ爆発のドハマりを体験することになる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Name *
Email *
Website

*