我的应用程序有以下流程屏幕:
主屏->屏1->屏2->屏3->屏4->屏5
现在我在每个屏幕上都有一个公共注销按钮
(主屏/ 1屏/ 2屏/ 3屏/ 4屏/ 5屏)
我想当用户点击注销按钮(从任何屏幕),所有屏幕将完成,一个新的屏幕登录将打开。
我已经尝试了几乎所有的FLAG_ACTIVITY来实现这一点。
我还通过一些答案在stackoverflow,但不能解决这个问题。
我的应用程序是在Android 1.6上,所以不能使用FLAG_ACTIVITY_CLEAR_TASK
有什么办法解决这个问题吗?
当用户希望退出所有打开的活动时,他们应该按下一个按钮,加载应用程序启动时运行的第一个活动,清除所有其他活动,然后让最后一个活动完成。当用户按下退出按钮时,运行以下代码。在我的例子中,LoginActivity是程序中运行的第一个活动。
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
上面的代码清除除LoginActivity之外的所有活动。然后将以下代码放入LoginActivity的onCreate(…)中,用于监听LoginActivity何时被重新创建并传递'EXIT'信号:
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
为什么在Android中创建退出按钮如此困难?
Android试图阻止你在应用程序中设置“退出”按钮,因为他们希望用户永远不会关心他们所使用的程序是否在后台运行。
Android操作系统开发人员希望你的程序能够在意外关机和关机的情况下存活下来,当用户重新启动程序时,他们会从停止的地方继续运行。因此,用户可以在使用应用程序时接到电话,并打开地图,这需要释放应用程序以获得更多资源。
当用户重新开始您的应用程序时,他们会在没有中断的情况下立即开始。这个退出按钮篡夺了活动管理器的权力,可能会导致自动管理的android程序生命周期出现问题。
从developer.android.com:
public void finishAffinity ()
在API级别16中添加
Finish this activity as well as all activities immediately below it in the current task that have the same affinity. This is typically used when an application can be launched on to another task (such as from an ACTION_VIEW of a content type it understands) and the user has used the up navigation to switch out of the current task and in to its own task. In this case, if the user has navigated down into any other activities of the second application, all of those should be removed from the original task as part of the task switch.
请注意,此结束不允许您向前一个活动交付结果,如果您试图这样做,则会抛出异常。