因此,这里是我的疑虑所在的场景:我的应用程序类中有一个活动的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
来执行您要执行的操作。