手动强制退出应用程序并重新启动后,异步任务不会调用OnPostExecute或onProgressUpdate

时间:2013-02-15 00:01:47

标签: java android android-asynctask

我有AsyncTaskdoInBackground()方式下载文件。我在发布之前测试我的应用程序。当我手动强制退出应用并重新启动时,似乎会调用doInBackground(),但不会调用onProgressUpdate()onPostExecute()。我的onPostExecute()调用方法导致UI更改。

如何确保调用onPostExecuteonProgressUpdate()?我还看到以下警告:

Activity停止ActivityRecord的{​​{1}}或Activity销毁超时ActivityRecordActivity空闲超时ActivityRecord

代码:

public void OnCreate(){

    new RefreshMyDashboardTask().execute();
}

private class RefreshMyDashboardTask extends AsyncTask<Void, Void, Long> {

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected void onProgressUpdate(Void... params) {
        super.onProgressUpdate(params);
    }

    @Override
    protected Long doInBackground(Void... params) { 
        // my server calls are called here.
    }

    @Override
    protected void onPostExecute(Long result) {
    }
}

1 个答案:

答案 0 :(得分:1)

如果你杀了你的应用程序,或者系统杀了它,你的应用程序的AsyncTask线程就会被杀死。它们都是应用程序流程的一部分;线程无法在启动它们的进程之外生存。

即使是IntentService也可能无法在强制退出后继续存在。这就是任务杀手如此糟糕的原因。

简而言之,您所看到的是预期的行为。