防止多次打开活动
我在带有图标的应用程序上有一个通用菜单。点击一个图标将开始一个活动。有没有办法知道一个活动是否已经在运行,并防止它多次(或从多个条目)启动?我也可以将处于onPause状态的活动带到前面吗?防止多次打开活动
使用此:
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
同时开始Activity
。
如果传递给Context.startActivity()的意图设置,这个标志将 导致启动的活动被带到其任务的 历史堆栈的前面,如果它已经是运行。
在清单文件的活动宣言,添加标签android:launchMode="singleInstance"
从startActivityForResult的文档中,如果您正在启动的活动使用singleTask启动模式,它将不会在您的任务中运行,因此您将立即收到取消结果。 – 2013-08-03 06:27:42
我有多个入口点,这对我很有用 – 2015-07-09 11:44:21
事实上,我不是“singleInstance”的粉丝,因为它会导致活动在单独的窗口中运行,就好像它是一个单独的应用程序,用户打开应用程序视图时的用户体验。 – 2017-04-09 08:08:25
创建活动,你不想开始多次像
Class ExampleA extends Activity {
public static Activity classAinstance = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
classAinstance = this;
}
}
现在在以往任何时候ü要的实例crosscheck我的意思是防止它启动多次,像这样检查
if(ExampleA.classAinstance == null) {
"Then only start your activity"
}
请注意,这样可以防止垃圾收集活动。此外,如果Activity是从其他不能访问(甚至不知道)静态活动引用的其他组件(例如,另一个应用程序)启动的,则这将无济于事。 – lxgr 2015-06-08 15:54:51
Add给你的Activity
定义Androidmanifest.xml
...
android:launchMode = "singleInstance"
只需使用
Intent i = new Intent(ActivityA.this, ActivityB.class);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
添加此
@Override
protected void onDestroy() {
super.onDestroy();
finish();
}
或
launchmode到singleTask /单模
或
总是通过清除栈
请给你的答案添加一些解释。 – ItamarG3 2017-05-19 12:21:48
**来自复审队列:**我可以请求您在请求答案时添加更多的上下文。仅有代码的答案很难理解。如果您可以在帖子中添加更多信息,它可以帮助提问者和未来的读者。 – 2017-05-19 17:46:37
我把它做以下工作完全打开新的活动。 在(甚至是从其他应用程序)
Intent launchIntent = getPackageManager().getLaunchIntentForPackage(APP_PACKAGE_NAME);
//the previous line can be replaced by the normal Intent that has the activity name Intent launchIntent = new Intent(ActivityA.this, ActivityB.class);
launchIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(launchIntent);
,并在接收器的工作的清单呼叫者活动或服务(我想阻止开放两次)
<activity android:name=".MainActivity"
android:launchMode="singleTask"
>
我没有做过Android开发在一段时间内,但我敢肯定,Android会调出你的'Activity'的现有实例,而不是启动一个新的实例。 – 2012-01-18 07:16:23