【问题标题】:Android Application Lifecycle and back buttonAndroid 应用程序生命周期和返回按钮
【发布时间】:2015-02-05 17:21:37
【问题描述】:

我已阅读有关活动生命周期的 Android 文档。但是,我很好奇应用程序中不同活动的行为方式。

根据我所做的一些测试,通过意图在同一应用程序中从 Activity A 转换到 Activity B 会通过 onPause() 暂停 Activity A 并通过 onCreate() 创建 Activity B。

奇怪的是当 Activity B 转换回 Activity A 时。

如果按下硬件返回键,则为 Activity B 触发 onPause(),为 Activity A 触发 onResume()。这是我所期望的。

但是,如果按下 ActionBar 上的后退按钮,则会为 Activity A 触发 onDestroy(),然后是 onCreate()onResume()

为什么会这样?

【问题讨论】:

    标签: android android-lifecycle


    【解决方案1】:

    ActionBar 上的“返回按钮”称为“向上按钮”。这是 Up Button 的预期行为,如果您查看执行“up”的代码的实现,您会看到重新创建了 Activity A。

    Intent parentActivityIntent = new Intent(getApplicationContext(), MainActivity.class);
    parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(parentActivityIntent);
    finish();
    

    您可以定义“向上”按钮应该做什么,但是,我建议坚持默认行为

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // Your Code Here.
                break;
        }
    }
    


    为什么?

    向上按钮(与后退按钮相反)应该在应用程序层次结构中导航更高一级,总是。后退按钮应该返回返回,即使它会离开当前应用程序。
    您不能只对当前的Activity 调用finish,因为父Activity 可能已经被垃圾回收并且不再存在。

    我强烈建议阅读官方Android Design Guidelines,尤其是关于Up vs Back的部分。

    【讨论】:

    • 感谢您在这里提供非常明确的答案。有没有办法让“向上按钮”像“返回按钮”一样执行,这样就不必重新创建父 Activity。
    • 是的,您可以覆盖此行为。
    • 是否有任何理由“坚持默认行为”?这样做的用例是不必重新创建先前的活动(ListView),因为滚动位置会丢失。
    • 不错的答案!您能否解释一下为什么默认行为应该比 finishing 当前的 Activity 更好? (假设当前Activity 是由父Activity 启动的)。
    • @mushroom 滚动位置可以使用 onSaveInstanceState 保存:)
    猜你喜欢
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多