从Activity.finish()之后没有执行的活动开始onDestroy

时间:2015-04-07 15:09:50

标签: android android-activity stack ondestroy

所以这是我怀疑的场景:我的Application类中有一个Activity对象的Stack对象,它将引用我的App中当前存在的所有Activity。所有活动都会在onCreate()处将其自身推入Stack中,并在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();
        }
    }
}

问题是来自FOR的所有迭代来自&#34; popActivitiesFromStack&#34;在执行任何OnDestroy()之前执行,并且在执行FOR时没有任何活动被激活,并且在FOR中调用的每个finish()调用都会进入相同的活动。

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

2 个答案:

答案 0 :(得分:0)

我建议阅读一下:

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

如果系统不需要销毁活动,

onDestroy()很可能不会立即执行。

答案 1 :(得分:0)

你的假设都是错的: - (

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

每当框架进行清理时,onDestroy()都会调用{p> Activity。它可以立即调用,也可以稍后调用。你无法控制时间。

Android会在任务中维护一系列活动,您可以使用Intent标记FLAG_ACTIVITY_CLEAR_TOP来执行您要执行的操作。