【发布时间】:2014-07-03 22:29:17
【问题描述】:
我试图了解当用户按下背面并且我没有覆盖 onOptionsItemSelected 时引擎盖下会发生什么。
我有以下场景:
-
intent.putExtra("abc", "abc");的活动 A -
getIntent()在onCreate()中的活动 B - 活动 C
当用户在活动 C 中点击返回时,究竟会发生什么?
如果我不覆盖后退按钮,按下后退将在 getIntent 行上产生 nullException。为什么?它在onCreate() 中,而不是在onStart() 中。
如果我使用onSaveInstanceState,捆绑总是空的。这使我假设 back 正在创建 Activity 的新实例。为什么?它应该自己完成。
如果我用finish() 覆盖后退按钮,它不再崩溃,但我认为后退的默认行为是运行finish()。
编辑更多细节:
我在每个生命周期方法中都放了一个祝酒词,我发现 Activity B 在在我按下 Activity C 之后调用了 destroy。这对我来说毫无意义!
清单:
活动 A
<activity
android:name=".activities.MainActivity"
android:configChanges="orientation"
android:screenOrientation="portrait"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
活动 B
<activity
android:name=".activities.MenuActivity"
android:configChanges="orientation"
android:screenOrientation="portrait"
android:label="@string/menu_title"
android:parentActivityName=".activities.MainActivity">
</activity>
活动 C
<activity
android:name=".activities.OptionActivity"
android:configChanges="orientation"
android:screenOrientation="portrait"
android:label="@string/option_title"
android:parentActivityName=".activities.MenuActivity">
</activity>
【问题讨论】:
-
当用户在活动 C 中点击返回时会发生什么取决于在调用活动 C 之前是否从活动 B 调用了“finish()”
-
活动 B 中没有
finish(),这就是我不明白的原因。 -
我们可以看看你的代码吗?还有日志。
-
我在 Activity C 中没有代码,这就是我可以编写代码来防止崩溃的重点,但我想了解为什么我必须这样做。我根本不覆盖后退按钮。导致崩溃的行在 Activity B 中:
this.getIntent().getExtras().getString(STATE_REST)并且该 Activity 显示 nullException,因为它正在重新创建并且没有意图。我的问题是为什么当我点击 Activity C 时 Activity B 会被破坏。 -
你能发布你的清单文件吗?看看您如何在此处指定“活动 B”可能会有所帮助。
标签: android