正确的方法来知道活动是否已被销毁

问题描述:

我可以知道知道活动是否已被销毁的正确方法是什么?目前,我正在使用以下方法。正确的方法来知道活动是否已被销毁

private volatile boolean isOnDestroyCalled = false; 

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

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

有没有其他方法比上述更好?

+0

我不太明白你的问题,你什么时候想知道这个?,你是在拖延这个活动还是在触发销毁? 你总是可以触发Finish();摧毁它。以下是一些帮助:http://developer.android.com/reference/android/app/Activity.html – najk 2012-07-10 08:54:32

+2

我需要自己了解这一点,因为我有一个异步任务触发了活动的回调,可能已被销毁同时。我的解决方法是在活动中保留对回调的引用,对回调中的活动进行引用,并在活动被销毁时清空回调中的ref,以便回调在null时不执行任何操作。 – qix 2014-04-25 11:36:42

+0

@Linus到目前为止最有名的技术是使用保留的实例片段:http://*.com/questions/8417885/android-fragments-retaining-an-asynctask-during-screen-rotation-or-configuratio – 2014-04-26 02:19:15

这样可以工作,但有时候操作系统会关闭应用程序,如果其他应用程序需要优先处理时,它会处于非活动状态。当然,我知道这种情况发生时,变量将被取消,不确定,但如果它在你的情况下使用挥发性转到主内存。但确保您获得正确价值的一种方法是将其保存在SharedPreferences中。

+2

它似乎不是一个好方法! – 2013-08-01 03:00:05