Android AsyncTasks如何检查活动是否仍在运行

Asa*_*evo 19 android android-asynctask

我已经使用AsyncTasks我的应用程序,以便懒惰下载和更新UI.

现在我AsyncTasks只是简单地更新UI:

protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);
        gender.setText(values[0]);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何检查性别所TextView呈现的活动是否仍然可用?

如果没有,我将收到错误,我的应用程序将关闭.

Col*_*ire 25

您可以在活动的onDestroy中取消您的asynctask

@Override
protected void onDestroy() {
    asynctask.cancel(true);
    super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)

并且在执行更改时,检查您的asynctask是否已被取消(活动已销毁)

protected void onProgressUpdate(String... values) {
    super.onProgressUpdate(values);
    if(!isCancelled()) {
         gender.setText(values[0]);
    }
}
Run Code Online (Sandbox Code Playgroud)


Ian*_*anB 8

我有一个类似的问题 - 基本上我是在用户销毁片段后在异步任务中获得NPE.在研究Stack Overflow上的问题后,我采用了以下解决方案:

volatile boolean running;

public void onActivityCreated (Bundle savedInstanceState) {

    super.onActivityCreated(savedInstanceState);

    running=true;
    ...
    }


public void onDestroy() {
    super.onDestroy();

    running=false;
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后,我在异步代码中定期检查"是否正在运行".我有压力测试这个,我现在无法"打破"我的活动.这非常有效,并且比我在SO上看到的一些解决方案更简单.

  • 这很简单,真的很有意义:)如果有人在考虑`volatile`关键字,请阅读:http://stackoverflow.com/a/107040/4331787 (2认同)