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

标签 java android android-asynctask

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

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

Activity 停止 ActivityRecordActivity 超时 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) {
    }
}

最佳答案

如果您终止应用程序,或者系统终止它,则应用程序的 AsyncTask 线程将被终止。它们都是应用程序流程的一部分;线程无法在启动它们的进程之外生存。

即使是 IntentService 也可能无法在强制退出后继续存在。这就是为什么任务 killer 是一个坏主意。

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

关于java - 我手动强制退出应用程序并重新启动后,异步任务不会调用 OnPostExecute 或 onProgressUpdate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14886280/

相关文章:

java - 使用 JSR303 进行 Spring MVC 日期格式验证

java - Logback Java 中带有模式的 JSON 布局

android - 使用 Kotlin 将多个 OnClickListener 添加到 RecyclerView

android - 从第二个 Activity 返回后调用 onCreateView

android - 使用 AsyncTask 在 ListView 中显示数据

java - 未连接适配器;跳过布局跳过 1 到 2 帧

java - 为什么 gradle 依赖项的 xml 配置带有 "Gradle__"前缀? Intellij IDEA 13

java - 使用java识别并分离Datagrampacke的数据包中的数据

android - Android中如何实现ASyncTask

java - 使 Dialog 在 AsyncTask 完成后关闭