我有三项活动Main
,Item
和ItemDetail
Item
已将Main
设置为清单
<activity
android:name=".Activities.Item"
android:parentActivityName=".Activities.Main"
/>
ItemDetail
已将Item
设置为清单
<activity
android:name=".Activities.ItemDetail"
android:parentActivityName=".Activities.Item"
/>
以下是活动流应该看起来像什么
Main > Item > ItemDetail
Item
和ItemDetail
都来自BaseActivity
public class Item extends BaseActivity { ... }
public class ItemDetail extends BaseActivity { ... }
BaseActivity
显示并启用主页按钮
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
现在问题是:当从ItemDetail
活动按 BACK 按钮时,Item
会被带到前台,这是预期的行为,对吧?但是,当从ItemDetail
活动按下 HOME 按钮时,会调用Item
活动的onDestroy
和onCreate
,表明(显然){{1}在重新创建之前,活动正在被销毁。
我的问题是为什么Item
活动被销毁,以及从Item
而不是后退按钮按下主页按钮。这对我来说毫无意义。
TL; DR
我的应用程序在按下home时崩溃,因为我希望ItemDetail
保留在活动堆栈上并保持状态,但是活动意外地被破坏导致空指针错误。
修改
是的,我已经实现了onSavedInstance状态并正在工作,只是已保存的状态消失了,从Item
activity Item
调用此行返回true
onCreate
答案 0 :(得分:2)
您不应该假设任何活动仍然在Backstack上并保持状态。相反,您应该正确实现onSaveInstanceState和onRestoreInstanceState。框架可能会在不是前台的任何时候终止您的Activity。甚至还有一个开发人员选项设置来帮助测试它,一旦它们不再是前景,它将关闭所有活动。我建议您经常使用此模式测试您的应用。