有关某种原因,我onPostExecute()没有我的AsyncTask完成之后被调用。

我类decleration:

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() ),因此是应该由UI线程调用该方法onPostExecute()从未被调用。

由另一种讨厌的错误,可能导致同样的错误。当定义的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将被调用之前。解决的办法是仅发布每秒一次。

对我来说是用户错误。我被它调用取消(真),而不是阅读文档不够紧密知道onPostExecute是不是在这种情况下,所谓的结束的AsyncTask,onCancelled是。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top