我正在尝试找出管理活动堆栈的最佳方法,以便优雅地处理退出和退出。似乎没有类似的问题可以解决这个问题。
我想在活动堆栈上保留LoginActivity,以避免在用户注销或点击时显示空白屏幕。这样做会让人心烦意乱。
* 退出=点击我的“退出”菜单项,它发送广播,调用finish()或finishAndRemoveTask(),然后调用System.exit(0)
如果这是用户首次登录此设备,则会按照流程1
流量1: LoginActivity> TermsActivity> PrivacyActivity> MainActivity
流程2: LoginActivity> MainActivity
在Flow 1中,PrivacyActivity在启动MainActivity时清除活动堆栈
✔退出正常工作
✖退出显示一个空白屏幕,因为它需要重绘
在Flow 2中,LoginActivity不会调用finish(),因此它会保留在活动堆栈上
✔注销看起来很流畅,因为LoginActivity不需要重绘
✖退出不起作用 - 当MainActivity完成时,会显示LoginActivity。即使我使用System.exit(0),应用程序也会被最小化,而不是真正关闭。当用户点击“概览”按钮时,该应用仍然存在,可以重新打开(到LoginActivity)。
对其他问题的建议答案不满意:
我不喜欢这些因为:
另一种建议的方法是在向前移动时使用startActivityForResult(),然后在向后移动时对onActivityResult()中的做出反应
如何在堆栈中保留活动(如果用户回击或注销),但在退出时清除堆栈?
答案 0 :(得分:0)
在你关于" quitting"的评论之后,我会有一种方法将活动封装在任务中。
任务1将是(0) LoginActivity> TermsActivity> PrivacyActivity 任务2将从(0)开始 MainActivity
这样: - 按回Task1内部将按预期导航(和您已有的一样) - 从MainActivity按回来将关闭应用程序(从技术上讲,我不希望在按下时退出)。
您必须实施的唯一逻辑是: - 退出将清除堆栈跟踪(如您所示) - Logout将启动LoginActivity并终止MainActivity(1)。
(0)和(1):将标志FLAG_ACTIVITY_NEW_TASK添加到您的Intent https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK
答案 1 :(得分:0)
我认为你能做的最好的事情就是实现片段,处理堆栈会更容易。