AsyncTaskLoaderの挙動

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

謎だー

↓弊社で開発、販売しているソフトウェアです↓

MediMonitor無料ダウンロード  

コメントを残す

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