为什么在返回父活动时始终会调用onDestroy?

mto*_*ssi 20 android android-lifecycle android-activity

我有一个非常简单的应用程序基于构建您的第一个应用程序教程.有两种活动:MainActivity调用DisplayMessageActivity通过startActivity().

进入时DisplayMessageActivity,我看到:

MainActivity.onStop()
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,但是当我按下后退按钮返回父母时MainActivity,我得到:

MainActivity.onDestroy()
MainActivity.onCreate(null)
MainActivity.onStart()
Run Code Online (Sandbox Code Playgroud)

对于这个非常简单的应用程序,活动总是被破坏.但根据文档(第二个要点),典型的行为是在这种情况下停止和重新启动活动.

此外,onDestroy()首次启动子活动时不会发生,但只会单击一次后退按钮.

两个问题:

  1. 有没有办法防止父母在常见情况下被摧毁?
  2. 为什么null被传到onCreate()这里?这阻止了我保持状态onSaveInstanceState().

请注意,我已经验证设置 - >开发者选项 - >应用 - >不要保持活动未选中.

编辑:

以下是子活动与父级链接的方式:

    <activity
        android:name="com.example.helloworld.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.helloworld.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.helloworld.MainActivity" />
    </activity>
Run Code Online (Sandbox Code Playgroud)

追踪DisplayMessageActivity.onOptionsItemSelected(),我可以看到它在呼唤Activity.onNavigateUp().

mto*_*ssi 26

感谢Greg Giacovelli的评论,我在这里找到了答案.解决方案是设置android:launchMode="singleTop".

我仍然无法理解为什么这些基本信息如此未知且难以找到!

  • 有很多信息,就像试图在针刺海中找到一根针! (2认同)