Android:我如何避免已经在堆栈中的开始活动?
让我们试着解释我的问题: 我得到了一个应用程序和一个服务。 启动应用程序与活动A. 服务发送一个广播,可以让应用程序启动活动B 现在用户开始活动C.Android:我如何避免已经在堆栈中的开始活动?
现在服务要重新开始b活动。但是,我怎么让他知道这项活动仍然在筹备中,或者是否存在这样的意图标志?
如何避免它将启动活动B,因为它已经在堆栈中?
我认为你需要让你的活动B singleInstance
,如果它已经创造你不想再创造,这是launch mode of the activity可以在清单android:launchMode
定义,定义如何活动将被实例化。
android:launchMode="singleInstance"
工作正常! :)谢谢 – 2012-03-07 09:25:01
但是,如果我将launchMode设置为singleInstance,我将无法正确获取onActivityResult回调。 – DevAndroid 2015-09-04 12:22:38
它解决了我的问题.. – 2015-10-15 05:21:17
您可以使用标记Intent.FLAG_ACTIVITY_NEW_TASK。如果活动已经在运行,它会将其放在前面,而不是创建新的活动。
如果您添加Intent.FLAG_ACTIVITY_CLEAR_TOP与此,那么在此活动后在堆栈中的所有活动将被清除。
这是exaclty我不想发生的事情。如果已经开始活动的活动。它不应该被覆盖。 – 2012-03-07 09:11:26
这不会覆盖该活动。它只会带来已经开始的活动。 – 2012-03-07 09:23:48
Intent.FLAG_ACTIVITY_NEW_TASK不适用于我..这总是开始新的活动.. 请帮我出来 – 2014-08-08 06:08:27
如果活动将是,如果已经开始了顶部,设置FLAG_ACTIVITY_SINGLE_TOP标志
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
mContext.startActivity(intent);
这在使用侧栏/抽屉时特别有用,并且您不希望在前面打开两次活动。 – dermatthias 2015-12-17 15:54:44
我开始使用Intent.FLAG_ACTIVITY_SINGLE_TOP从一个服务的活动,该活动不会启动,我得到此错误: android.util.AndroidRuntimeException:从活动上下文外调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗? – yeahman 2016-03-10 18:36:09
途径android:launchMode="singleInstance"
,只是添加标志到Intent
不为我工作。 什么工作是:
在代码中获取活动开始:
Intent intent = new Intent(activity, ActivityThatHasToBeStarted.class);
intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
startActivity(intent);
在ActivityThatHasToBeStarted
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}
// Code for this creation
}
如果您不需要第二个活动了,这是件好事练习完成它,那么你应该在手术结束后的第二次活动上做到这一点:
startActivity(new Intent(this, FirstActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
finish();
我建议您使用Intent.FLAG_ACTIVITY_CLEAR_TOP,因为它会移除所有在您的目标活动之上开始的活动。
如:
Intent intent = new Intent(sourceActivity, Target activity);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent)
您可以考虑使用的android:launchMode="singleTop"
代替android:launchMode="singleInstance"
Good article about the differences
什么是d到底是什么?它是你写的代码吗?如果是这样,答案很简单,**不**调用'StartActivity(B)'。 – 2012-03-07 08:58:40
对不起,我重写了我的问题:) – 2012-03-07 09:02:24