清除任务中的所有活动?
我有一个启动画面活动,然后登录活动。我的历史堆栈的样子:清除任务中的所有活动?
SplashActivity
LoginActivity
当用户通过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.
有一些标志,我可以用做那?
// 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,然后你想获得b ack to A欢迎,但额外的标志不应该影响你的情况)。
Intent.FLAG_ACTIVITY_NO_HISTORY也可以用于您的情况,如果您不希望历史堆栈上的活动。
finish()
从堆栈中删除活动。所以,如果您启动了LoginActivity并在SplashActivity上调用finish()
,然后确实执行相同的步骤启动WelcomeActivity,您将获得所需的行为。不需要使用额外的标志。
这可以工作,并且似乎是2.3的最干净的解决方案。谢谢!对于低于11的API, – jskierbi 2014-04-15 16:21:37
使用android:noHistory="true"
清单文件中的飞溅活动。
<activity
android:name=".activity.SplashActivity"
android:theme="@style/theme_noActionBar"
android:noHistory="true">
不起作用 – 2014-12-05 13:16:57
Intent intent = new Intent(this, NextActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
-
在情况下,所有三个活动的参与了相同的应用程序(相同taskAffinity),可以挑1,2或3任一以下。否则你应该选择下面的1,2。
如果你不想从LoginActivity返回回SplashActivity,您可以定义:活动属性noHistory在AndroidManifest.xml中,也可以设置成FLAG_ACTIVITY_NO_HISTORY的意图发动SplashActivity。如果SplashActivity从Launcher启动,您应该选择设置活动属性noHistory的方式。
如果您不想从WelcomeActivity返回LoginActivity,那么您可以使用上述第1项的活动属性noHistory或FLAG_ACTIVITY_NO_HISTORY。
如果你想清除回栈上的具体情况,你可以与FLAG_ACTIVITY_NEW_TASK一起使用FLAG_ACTIVITY_CLEAR_TASK(FLAG_ACTIVITY_CLEAR_TASK总是必须配合使用FLAG_ACTIVITY_NEW_TASK)。但是,如果正在启动的活动涉及其他应用程序(即不同的taskAffinity),则该任务将在清除任务后启动其他任务,而不是当前任务。因此请确保正在启动的活动涉及相同的应用程序(taskAffinity)。
“不知道是否使用FLAG_ACTIVITY_CLEAR_TASK将清除出在我的任务与否的所有活动。” - 使用BACK按钮并亲自查看。如果您可以使用BACK按钮回到以前的活动,那么他们仍然在后台。 – 2013-02-19 13:12:10
答案是使用'FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK',不是吗? – 2014-03-31 09:53:46
代码中有一个错字...它应该是'.addFlags(...)'而不是'.addFlag'。 – Developer 2015-06-07 23:02:39