結論:タイトルが長い
結論:onStopでgetLoaderManager().destoryLoader(id)してあげる
こんにちはこんにちは
世間では何かとAsyncTaskじゃなくてAsyncTaskLoader使おうぜっていう風潮ですね。 僕もブームに乗ってAsyncTaskからAsyncTaskLoaderに乗り換えてみました。 タイトルに有るとおり、FragmentTabHost内部のFragmentで使用しています。 タブが切り替わるたびに、毎回Loaderで通信して、最新のデータを取得しようと思ってました。 そんなわけで
@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); String url = URL + "?id=" + id; Bundle bundle = new Bundle(); bundle.putString("url", url); getLoaderManager().initLoader(LOADER_IDI, null, this); }
のようにしてました。タブが切り替わればonActivityCreatedが呼ばれるので、毎回呼ばれる、毎回通信して最新情報、ヤッピーって思ってた時期が僕にもありました。 LoaderはFragmentのインスタンス毎に割り振られるので、タブを切り替えてもFragmentのインスタンスは死んでないらしく、既に取得済みのデータが返ってきました。そうじゃないんだ。もう一回通信して欲しいのだ。 そんなわけで、tabが切り替わるときにはFragmentのonStopが呼ばれるので、そこで一度Loaderを破棄して、またLoaderを初期化させることで事なきを得た。めでたしめでたし。
@Override public void onStop() { super.onStop(); getLoaderManager().destroyLoader(LOADER_ID); }