onDestroy from activity未在activity.finish()之后立即执行



因此,这里是我的疑虑所在的场景:我的应用程序类中有一个活动的Stack对象,它将引用我的应用中当前活动的所有活动。所有活动都在onCreate()处将自己推入堆栈,并在onDestroy()处弹出自己

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MyApplicationClass.stackOfActivity.add(this);
}
@Override
protected void onDestroy() {
    super.onDestroy();
    MyApplicationClass.stackOfActivity.pop();
}

在MyApplicationClass(即扩展Application的类)中,我创建了一个方法来完成堆栈顶部的活动。

static public void popActivitiesFromStack(int  amountOfActivitiesToBePopedOut){
    if(stackOfActivity.size() >= amountOfActivitiesToBePopedOut){
        for(int i = 0; i < amountOfActivitiesToBePopedOut; i++){
            stackOfActivity.peek().finish();
        }
    }
}

问题是,"popActivitiesFromStack"中FOR的所有迭代都会在执行任何OnDestroy()之前执行,因此在执行FOR时不会弹出任何活动,FOR中调用的每个finish()调用都会转到同一个活动。

所以我的问题是,为什么在这种情况下,onDestroy()没有在finish()之后立即执行

我建议阅读:

http://developer.android.com/training/basics/activity-lifecycle/index.html

如果系统不需要销毁活动,onDestroy()很可能不会立即执行。

您的假设都是错误的:-(

对多个活动的生命周期调用不会以任何定义的或确定性的顺序执行。

每当框架开始清理时,就会在Activity上调用onDestroy()。它可以立即调用,也可以在很久以后调用。你无法控制时间。

Android维护任务中的活动堆栈,您可以使用Intent标志FLAG_ACTIVITY_CLEAR_TOP来执行您要执行的操作。

最新更新