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を指定すれば大丈夫ってこと???
謎だー

