我在我的应用程序中有几个活动 . 并且流程非常复杂 . 当我单击Logout应用程序naviagates登录屏幕时,用户可以通过取消按钮退出(调用 system.exit(0)
)
当我退出或退回按钮时,系统从堆栈调用一个活动:(当我到达登录界面时,如何清除堆栈中的所有活动?调用 finish()
是不实际的,因为有太多的活动,一些活动不应该关闭时它们是活动的,例如本机相机调用活动 .
validateuser logoutuser = new validateuser();
logoutuser.logOut();
Intent loginscreen = new Intent(homepage.this, Login2.class);
(homepage.this).finish();
loginscreen.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(loginscreen);
9 回答
对于Xamarin开发人员,您可以使用:
大多数人都错了 . 如果要关闭现有的活动堆栈而不管其中的内容是什么并创建新的root,则正确的标志集如下:
From the doc:
当您在上次活动中调用
startActivity
时,您可以随时使用作为该意图的旗帜 .
阅读更多关于国旗here的信息 .
这是一个简单的辅助方法,用于启动新活动,作为从API级别4到当前版本17的新顶级活动:
从你当前的活动中这样称呼它:
就我而言,LoginActivity也被关闭了 . 结果是,
没有帮助 .
但是,设定
帮助过我 .
Clear Activity Backstate 由以下代码:
Done
我注意到你要求的解决方案不依赖于
finish()
,但我想知道这是否有帮助 .我跟踪是否使用静态类变量引发退出标志,该变量在整个应用程序生命周期中存活 . 在每个相关活动的
onResume()
中,使用ExitHelper类
假设在mainActivity中,用户按下按钮退出 - 您可以设置
ExitHelper.isExitFlagRaised = true;
然后finish()
. 此后,还将完成自动恢复的其他相关活动 .这个决定很好:
但新的活动推出很长时间,你会看到白色的屏幕 . 如果这很关键,那么使用此解决方法:
怎么用呢:
缺点:必须在堆栈上关闭的所有活动必须扩展BaseActivity