【问题标题】:Activity.onDestroy being called on every back button push每次按下后退按钮时都会调用 Activity.onDestroy
【发布时间】:2017-01-19 03:34:42
【问题描述】:

我正在测试我正在开发的 Android 应用。

它包含一个 MainActivity

通过测试,我注意到每次按下返回按钮时都会调用 onDestroy。

我觉得这很奇怪。所以我使用 android studio 创建了一个新的空活动应用程序,并且没有添加任何代码。只是一个简单的hello world。

即使在这个 hello world 应用程序中,每次我按下返回时都会调用 onDestroy。

我正在运行三星 S4,我没有理由相信它资源匮乏。这是怎么回事?

我尝试将 android:launchMode 设置为 AndroidManifest.xml 中的所有可用值,但这些都不起作用....

【问题讨论】:

    标签: android android-activity activity-lifecycle


    【解决方案1】:

    每当您按下返回按钮时,Activity 都会被破坏,即 android 默认行为。这就是代码的流动方式。 在 Activity 中覆盖 onBackPressed

       /**
         * called when user press back button on device
         */
        @Override
        public void onBackPressed() {
            super.onBackPressed();
        }
    

    进入位于 FragmentActivity 内部的 onBackPressed,这表明它将首先从活动中弹出所有片段,然后它将完成活动。

       /**
         * Take care of popping the fragment back stack or finishing the activity
         * as appropriate.
         */
    public void onBackPressed() {
        if (!mFragments.getSupportFragmentManager().popBackStackImmediate()) {
            supportFinishAfterTransition();
        }
    }
    

    【讨论】:

      【解决方案2】:

      在按下返回按钮后调用 OnDestroy() 是正常且预期的行为。这是 Android 活动生命周期的标准部分。您可以在此处阅读有关生命周期的信息:https://developer.android.com/guide/components/activities/activity-lifecycle.html

      除非您有充分的理由,否则我不建议您按照 jitesh 的建议覆盖后退按钮行为。用户会期望您的应用在按下后退按钮后“关闭”(销毁)。

      【讨论】:

        【解决方案3】:

        如果您不希望每次点击返回按钮时都调用 OnDestroy():

        @Override
        public void onBackPressed() {
            // super.onBackPressed(); // remove this line
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-19
          • 1970-01-01
          • 1970-01-01
          • 2012-12-26
          • 2010-09-28
          • 2016-10-02
          相关资源
          最近更新 更多