多次阻止打开活动

时间:2012-01-18 07:11:25

标签: android android-activity

我的应用程序上有一个带图标的常用菜单。单击图标将启动活动。有没有办法知道一个活动是否已经在运行并阻止它多次启动(或从多个条目开始)?我也可以将处于onPause状态的活动带到前面吗?

8 个答案:

答案 0 :(得分:38)

使用此:

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

开始Activity

来自documentation

  

如果在传递给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

来自official documentation

如果已设置,并且正在启动的活动已经在 当前任务,而不是启动该任务的新实例 活动,除此以外的所有其他活动将被关闭, 该意图将作为 新的意图。

还可以将 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 
/>