【问题标题】:onDestroy from activity not executing right after Activity.finish()在 Activity.finish() 之后未立即执行的活动的 onDestroy
【发布时间】:2015-04-07 15:09:49
【问题描述】:

所以这是我的疑问所在的场景:我的应用程序类中有一个 Activity 的 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”的所有迭代都在任何 OnDestroy() 执行之前执行,并且在执行 FOR 时不会弹出任何活动,并且每次完成在 FOR 中调用的 () 调用会转到相同的活动。

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

【问题讨论】:

    标签: android android-activity stack ondestroy


    【解决方案1】:

    我建议阅读:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      Android 会在任务中维护 Activity 堆栈,您可以使用 Intent 标志 FLAG_ACTIVITY_CLEAR_TOP 来做您想做的事情。

      【讨论】:

        猜你喜欢
        • 2012-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-23
        • 2015-08-18
        相关资源
        最近更新 更多