我有一个启动画面活动,然后是登录活动.我的历史堆栈看起来像:
SplashActivity
LoginActivity
Run Code Online (Sandbox Code Playgroud)
当用户通过LoginActivity成功登录时,我想启动WelcomeActivity,但清除整个堆栈:
SplashActivity
LoginActivity // launches WelcomeActivity ->
WelcomeActivity
// but now all three are in the history stack, while I only
// want WelcomeActivity in the stack at this point.
Run Code Online (Sandbox Code Playgroud)
我可以使用一些标志来做到这一点吗?
// LoginActivity.java
Intent intent = new Intent(this, WelcomeActivity.class);
intent.addFlag(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
Run Code Online (Sandbox Code Playgroud)
不确定使用FLAG_ACTIVITY_CLEAR_TASK是否会清除我的任务中的所有活动.我可以通过使用startActivityForResult()调用展开堆栈来"手动"执行此操作,但是会更脆弱并且需要维护更多代码.
谢谢
Jos*_*arl 41
是的,应该工作正常.你可以使用:
FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOPFLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_NEW_TASK这确保了如果一个实例已经在运行并且不是顶级的,那么它上面的任何内容都将被清除并且将被使用,而不是启动一个新实例(这在你去过欢迎活动后很有用 - >活动A然后你想从A回到欢迎,但额外的标志不应该影响你的情况).
用于android:noHistory="true"清单文件中的splash活动.
<activity
android:name=".activity.SplashActivity"
android:theme="@style/theme_noActionBar"
android:noHistory="true">
Run Code Online (Sandbox Code Playgroud)
finish()从堆栈中删除活动.因此,如果您启动LoginActivity并调用finish()SplashActivity,然后您完成同样的操作以启动WelcomeActivity,您将获得所需的行为.无需使用额外的标志.
小智 8
Intent intent = new Intent(this, NextActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51034 次 |
| 最近记录: |