AsyncTaskLoaderについてはさんざん悩まされてきたけど、また再びバグって大変だった。
具体的にはActivityから離れて戻ってきた時にonStartLoading→onLoadFinishedが流れるんだけど、何度も何度もActivityに戻るときに同じ処理が流れてて本当に謎でバグの原因だった。
今使っている自作のAsyncLoaderはJSONを元に使っているのだけど、JSONに変換出来ない場合がある。その時はNULLを流すようにしてるんだけどそれがイケなかったようだ。
@Override public void deliverResult(JSONObject data) { if (isReset()) { if (this.result != null) { //this.result = null; } return; } String strerror="{\"" + "this" + "\"" + ":" +"\""+"ReConnect" + "\""+"}";//{"this":"FailConnect"} JSONObject aaa=new JSONObject(); try{aaa=new JSONObject(strerror);}catch (JSONException e2) {}//なんかめんどくさい this.result = aaa; super.deliverResult(data); if (isStarted()) { } } @Override protected void onStartLoading() { if (this.result != null) { deliverResult(this.result); } if (takeContentChanged() || this.result == null) { forceLoad(); } }
取り敢えず荒療治でむりやりResultに値をセットして、復帰時の処理を判別できるようにした。
これなら取り敢えずは forceLoad()に行かずにそのままdeliverResultしてくれる。
ゼッタイ何か問題ある気がするけど取り敢えず様子見。
取り敢えず今のところの挙動として、
なんか違うURLかつLoaderIDが同じでgetSupportLoaderManager().restartLoaderをすると、最初したURLのLoaderでonLoadFinishedが流れる。
でもなんか同じURLで同じLoaderIDだったらonLoadFinishedは一度しか流れず正常に行く感じ
つまりひとつのURLに1つのLoaderIDを指定すれば大丈夫ってこと???
謎だー