我的应用程序上有一个带图标的常用菜单。单击图标将启动活动。有没有办法知道一个活动是否已经在运行并阻止它多次启动(或从多个条目开始)?我也可以将处于onPause状态的活动带到前面吗?
答案 0 :(得分:38)
使用此:
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
开始Activity
。
如果在传递给Context.startActivity()的Intent中设置,则此标志将为 导致已启动的活动被带到其任务的前端 历史堆栈如果已经在运行。
答案 1 :(得分:14)
在Manifest文件的活动声明中,添加标记android:launchMode="singleInstance"
答案 2 :(得分:3)
通过执行以下操作,我完美地完成了工作。 在调用者活动或服务中(甚至来自其他应用程序)
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"
>
答案 3 :(得分:1)
将其添加到Activity
...
Androidmanifest.xml
定义中
android:launchMode = "singleInstance"
答案 4 :(得分:0)
创建您不希望多次启动的活动实例,例如
Class ExampleA extends Activity {
public static Activity classAinstance = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
classAinstance = this;
}
}
现在你想要交叉检查的地方我的意思是阻止它多次启动,请像这样检查
if(ExampleA.classAinstance == null) {
"Then only start your activity"
}
答案 5 :(得分:0)
只需使用
Intent i = new Intent(ActivityA.this, ActivityB.class);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
答案 6 :(得分:0)
这对我有用:
PENDING
如果已设置,并且正在启动的活动已经在 当前任务,而不是启动该任务的新实例 活动,除此以外的所有其他活动将被关闭, 该意图将作为 新的意图。
还可以将 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
与之配合使用。
然后代码将是:
FLAG_ACTIVITY_NEW_TASK
答案 7 :(得分:-1)
请在清单文件中添加此内容
<activity
android:name=".ui.modules.profile.activity.EditProfileActivity"
android:launchMode="singleTask" // <<this is Important line
/>