我有一个Android应用程序,它由单个Activity
组成。如何确保在给定时间内只存在一个应用程序(== Activity
)的实例?
我遇到了这样一种情况,通过多次点击应用程序图标,我成功打开了多个应用程序实例(这并不总是发生)。
我有一个Android应用程序,它由单个Activity
组成。如何确保在给定时间内只存在一个应用程序(== Activity
)的实例?
我遇到了这样一种情况,通过多次点击应用程序图标,我成功打开了多个应用程序实例(这并不总是发生)。
像这样更改您的清单:
<activity
android:name="com.yourpackage.YourActivity"
android:label="@string/app_name"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
包含android:launchMode="singleTask"
,这将使得无法同时启动多个Activity实例。有关更多信息,请参见activity文档。
接受的答案达到了其目的,但这并不是做这件事的最佳方式。
相反,我建议在每个活动中使用静态的AtomicInteger
,如下所示:
//create a counter to count the number of instances of this activity
public static AtomicInteger activitiesLaunched = new AtomicInteger(0);
@Override
protected void onCreate(Bundle pSavedInstanceState) {
//if launching will create more than one
//instance of this activity, bail out
if (activitiesLaunched.incrementAndGet() > 1) { finish(); }
super.onCreate(pSavedInstanceState);
}
@Override
protected void onDestroy() {
//remove this activity from the counter
activitiesLaunched.getAndDecrement();
super.onDestroy();
}
声明您的活动应使用singleInstance
模式启动会开始干扰活动和任务的默认行为,这可能会产生一些不良影响。
Android 文档建议仅在必要时(在此情况下不需要)打断此行为:
警告:大多数应用程序不应中断活动和任务的默认行为。如果您确定需要修改默认行为,则要小心,并确保测试活动在启动时和从其他活动和任务导航回到该活动时的可用性以及返回按钮的使用情况进行测试。务必测试可能与用户预期行为冲突的导航行为。
我发现我的应用程序的用户经常会出现内存不足的情况,而我一直在努力弄清楚原因。在尝试解决问题时,我发现我可以通过重复点击图标然后返回主屏幕,再次点击图标,再返回主屏幕等方式打开多个应用程序实例。我可以看到内存使用量不断增加,直到最终应用程序崩溃。在崩溃之前,我可以点击“关闭”菜单选项,之前的实例就会回到前台,这种情况会发生多次,就像我启动应用程序一样。
我的解决方案是在清单文件中添加android:launchMode="singleInstance"
。从那以后,我就无法打开多个实例或使应用程序崩溃了。