问题
我试图找出管理活动堆栈以优雅地处理注销和退出的最佳方法。这些类似的问题似乎都没有解决这个问题。如何在活动堆叠时退出(以避免在注销/返回期间重绘)?
我想在活动堆栈上保留LoginActivity以避免在用户注销或回退时显示空白屏幕。这样做会导致戒烟。
* 退出=打我的 “退出” 菜单项,它发送一个广播,呼吁结束()或finishAndRemoveTask(),然后System.exit(0)
形势
如果这是用户第一次登录此设备,他们遵循流程图1
流程1: LoginActivity> TermsActivity> PrivacyActivity> MainActivity
流程2: LoginActivity> MainActivity
在流程1中,PrivacyActivity清除活动堆栈当它开始MainActivity
✔ 退出正常工作
✖注销显示了一个短暂黑屏,因为它需要重绘
流入2,LoginActivity不调用finish(),所以它仍然是活动堆栈
✔ 记录了外表光滑,如LoginActivity并不需要重绘
✖退出不工作 - 当MainActivity完成,LoginActivity是DISPLA YED。即使我使用System.exit(0),应用程序也会最小化,而不是真正关闭。当用户点击概览按钮时,该应用程序仍然存在,并且可以重新打开(以LoginActivity)。
途径
不满意建议的回答其他问题:
- 总是调用finish()开始下一个活动
- 添加机器人:noHistory = “真”到清单中的活动
我不喜欢这些,因为:
- 这将导致一个(暂时的)空白LoginActivity当用户注销MainActivity的
- 流入1,第3个活动都应该是“backable” - 该方法导致(简述)空白屏幕回击时
另一个建议的方法是使用startActivityForResult()而向前移动,然后在onActivityResult(该反应),同时向后移动小号
- onActivityResult()时的onResume()前右调用,但有这种情况发生在LoginActivity的onCreate()和在onStart()的东西,一堆
- 我想MainActivity的退出过渡是标准“缩小到中间”一个
- 我担心戒烟会导致过渡到LoginActivity,一个(很短但并不明显)的空白灰色等待/闪光,然后退出
- 更多活动将在稍后添加 - 这可能导致不得不遍历一系列活动以退出
- 如果在启动MainActivity时将TermsActivity和PrivacyActivity从堆栈中移除,我不确定这是否会导致LoginActvity.onActivityResult()被调用,因为它是启动MainActivity的PrivacyActivity。
问题
我怎样才能保持在栈上的活动(在情况下,用户打回或注销),但清除栈,而戒烟?
就这样我们很清楚,当用户按Home按钮时,你是否打电话“退出”?或者实际上杀了应用程序(通过将它从最新状态中删除)?或者在代码中实现的逻辑? – NSimon
我应该更具体:我有一个“退出”菜单项[1]根据API版本[3]调用发送广播[2]调用finish()或finishAndRemoveTask()调用System.exit(0) – CanProgram