正确的方法来判断一个Activity是否被销毁

11

请问有没有正确的方法可以知道一个Activity是否被销毁?目前,我正在使用以下方式。

private volatile boolean isOnDestroyCalled = false;

@Override
protected void onDestroy() {
    super.onDestroy();
    isOnDestroyCalled = true;
}

public boolean isOnDestroyCalled() {
    return this.isOnDestroyCalled;
}

除了上述方法,是否还有更好的方法?


我不太明白你的问题,你想什么时候知道这个?是你正在销毁活动还是其他东西触发了销毁?你可以随时触发Finish();来销毁它。这里有一些帮助 http://developer.android.com/reference/android/app/Activity.html - najk
2
我自己需要知道这个,因为我有一个异步任务,在活动上触发回调,而此时活动可能已经被销毁了。我的解决方法是在活动中保留对回调的引用,在回调中保留对活动的引用,并在活动被销毁时将引用设置为null,以便如果为空,则回调不执行任何操作。 - qix
@Linus 到目前为止最为常用的技术是使用保留实例片段:https://dev59.com/92oy5IYBdhLWcg3wo_gn - Cheok Yan Cheng
很好,这看起来可以处理配置更改,但在我的情况下,活动永远不会重新创建(例如,因为用户按了返回键),我只想忽略回调。 - qix
1个回答

4

这个方法是可行的,但有时操作系统会在其他应用需要优先级时关闭您的应用程序,如果它处于非活动状态一段时间。当发生这种情况时,变量将被清空,使用 volatile 可能不会影响到您的情况。但为确保获取正确的值,一种方法是将其保存在 SharedPreferences 中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接