所以这是我怀疑的场景:我的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()之后立即执行?
答案 0 :(得分:0)
我建议阅读一下:
http://developer.android.com/training/basics/activity-lifecycle/index.html
如果系统不需要销毁活动,onDestroy()很可能不会立即执行。
答案 1 :(得分:0)
你的假设都是错的: - (
对多个活动的生命周期调用不会以任何已定义或确定的顺序执行。
每当框架进行清理时,onDestroy()
都会调用{p> Activity
。它可以立即调用,也可以稍后调用。你无法控制时间。
Android会在任务中维护一系列活动,您可以使用Intent
标记FLAG_ACTIVITY_CLEAR_TOP
来执行您要执行的操作。