清除任务中的所有活动?
我有一个启animation面活动,然后login活动。 我的历史堆栈看起来像:
SplashActivity LoginActivity
当用户通过LoginActivity成功login时,我想启动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.
有一些我可以使用的标志吗?
// LoginActivity.java Intent intent = new Intent(this, WelcomeActivity.class); intent.addFlag(Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); finish();
不知道是否使用FLAG_ACTIVITY_CLEAR_TASK将清除我的任务中的所有活动。 我可以通过使用startActivityForResult()调用展开堆栈来“手动”执行此操作,但会更脆弱,代码更多。
谢谢
是的,应该可以正常工作。 你可以使用:
-
FLAG_ACTIVITY_CLEAR_TOP
-
FLAG_ACTIVITY_SINGLE_TOP
-
FLAG_ACTIVITY_CLEAR_TASK
-
FLAG_ACTIVITY_NEW_TASK
这确保了如果一个实例已经运行,并且不是顶层的,那么顶层的任何东西都会被清除,并且会被使用,而不是开始一个新的实例(这个有用的,一旦你已经走了欢迎活动 – >活动A,然后你想从A返回欢迎,但额外的标志不应该影响你的情况)。
finish()
从堆栈中删除活动。 所以,如果你启动了LoginActivity,然后在SplashActivity上调用finish()
,然后再按照相同的方式启动WelcomeActivity,你将会得到所需的行为。 不需要使用额外的标志。
清单文件中的飞溅活动使用android:noHistory="true"
。
<activity android:name=".activity.SplashActivity" android:theme="@style/theme_noActionBar" android:noHistory="true">
Intent.FLAG_ACTIVITY_NO_HISTORY也可以在你的情况下工作,如果你不希望历史堆栈上的活动。
Intent intent = new Intent(this, NextActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent);
-
如果所有的三个活动都涉及同一个应用程序(相同的taskAffinity),你可以select下面的1,2或3。 否则你应该select下面的1,2。
-
如果您不想从LoginActivity返回SplashActivity,则可以在AndroidManifest.xml中定义activity属性noHistory,或者可以将FLAG_ACTIVITY_NO_HISTORY设置为启动SplashActivity的意图。 如果SplashActivity从Launcher启动,您应该select设置活动属性noHistory的方式。
-
如果您不想从WelcomeActivity返回LoginActivity,那么可以使用上面第一个数字中的任何一个活动属性noHistory或FLAG_ACTIVITY_NO_HISTORY。
-
如果要在特定情况下清除堆栈,可以将FLAG_ACTIVITY_CLEAR_TASK与FLAG_ACTIVITY_NEW_TASK结合使用(FLAG_ACTIVITY_CLEAR_TASK总是必须与FLAG_ACTIVITY_NEW_TASK结合使用)。 但是,如果正在启动的活动涉及到其他应用程序(即不同的taskAffinity),则该任务将在任务清除后启动其他任务,而不是当前任务。 所以请确保正在启动的活动涉及相同的应用程序(taskAffinity)。
-
- Android Studio找不到与com.android.support:appcompat-v7:+相匹配的任何版本
- Android Google地图:禁止在MapFragment中拖动
- Google地图片段在片段内返回空值
- Android的AsyncTaskLoader不启动loadInBackground?
- Android中对话被解散或取消的区别是什么?
- Android Hello-World编译错误:Intellij无法findaapt
- 在android中获取我的电话号码
- 使用Google Maps API v2获取驾车路线
- Environment.getExternalStorageDirectory不会返回可移动存储的path