質問

なぜか私の onPostExecute() 私の名前にちなんで呼ばれません AsyncTask 終わります。

私のクラス宣言:

public class setWallpaperForeground extends AsyncTask<String, Integer, Boolean>

私のonPostExecute():

protected void onPostExecute(Boolean result)

すべてうまくいきます、私の doInBackground() 正常に完了し、ブール値を返しますが、そのまま終了します。

ありがとう

役に立ちましたか?

解決

あなたはUIスレッド上で、あなたのAsyncTaskを作成しましたか?また、あなたがそれを正しく宣言したことを確認するためにonPostExecute()メソッドに@Overrideアノテーションを追加します。

他のヒント

あなたはexecute()方法でタスクを開始しましたか?あなただけのonPostExecute起動した場合doInBackgroundは実行されません。

が見つかりました/別の厄介なミスを犯しました onPostExecute(Param param)のあなたのparamsは、あなたがextends AsyncTask<...,...,Param>で定義され、あなたが@Overrideアノテーションを使用しなかったものと一致しない場合は、

、それが実行されることはありません、あなたは、Eclipseからの警告を得ることはありません。

自分自身への

注: ただ、常に@Overrideアノテーションを使用し、Eclipseがお手伝いを致します。

すべての名前付きのミスを避けるために、

もう一つの簡単な方法:

Eclipseの

Right-click in code > Source > Override/Implement Methods

同じ問題が発生し、これらの回答がどれも役に立たなかった後、UI スレッドがブロックされていることがわかりました ( CountDownLatch.await()) したがって、 onPostExecute() UI スレッドによって呼び出されるはずのメソッドが呼び出されませんでした。

は、この同じエラーが発生する可能性があり、別の厄介なミスを犯しました。 AsyncTaskを定義し、それを呼び出すとき、私はexecuteを呼び出していませんでしたが、doInBackgroundを呼んでいた。

new AsyncTask<String,Void,Void>() {
    ....
}.doInBackground("parameter");

ではなく

new AsyncTask<String,Void,Void>() {
    ....
}.execute("parameter");

私は同じ問題に直面しています。上記の解決策のどれも私のために働いていません。それから私は多分それは他の誰かを助け、問題を考え出します。

私は以下のコードを呼び出す

ではUIスレッドます:

public class XActivity ...{
    onCreate(){
        ....

        new SaveDrawingAsync(this).execute();

        while(true)
        {
            if(MandalaActivity.saveOperationInProgress){
                continue;
            }
            super.onBackPressed();
            break;
        }

        ...
    }
}

私のAsyncTaskクラス定義ます:

public class SaveAsync extends AsyncTask<Object, Void, Void> {

    @Override
    public Void doInBackground(Object... params) {
        saveThem(); // long running operation
        return null;
    }

    @Override
    public void onPostExecute(Void param) {
        XActivity.saveOperationInProgress = false;
    }

    @Override
    public void onPreExecute() {
       XActivity.saveOperationInProgress = true;
    }

}
上記のコードonPostExecuteで

は呼び出されません。それは理由asynctask実行後の無限ループです。 asynctaskとinifiniteループ互いに仕上げの両方を待ちます。このように、コードstucks!

ソリューションは、設計を変更している!

私は同じ動作を持っていた、その原因は、私は次のコードでdoInBackground内部の進歩として多くのメッセージを投稿してきたということでした。

new Handler(Looper.getMainLooper()).post(new Runnable() {
   @Override
   public void run() {
     // .. some UI updates
   }
});

これは、メインthradメッセージキューをオーバーロードし、そしてonPostExecuteと呼ばれるになるだろう前に、長時間の遅延の原因となっている必要があります。ソリューションは、毎秒一度のみ投稿することでした。

私にとっては、ユーザー・エラーでした。私はonCancelledがある、それを(真の)キャンセル呼び出すことにより、AsyncTaskを終了し、onPostExecuteが、この場合には呼び出されないことを知って密接に十分なドキュメントを読んでいませんでした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top