通过通知开始活动:避免重复活动
因此,我目前正在显示通知。当用户点击这个通知时,应用程序就会启动。通知仍然存在,表明服务正在后台运行。通过通知开始活动:避免重复活动
Intent notificationIntent = new Intent(context, LaunchActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
mNotificationManager.notify(1, notification);
但是,我发现了一个错误出现的情况。如果用户通过单击正常图标启动应用程序,并且活动正在运行时单击该通知,则会启动一个新的活动,而不在先前的活动退出,而后者位于早期的活动之上。这还不是全部:进一步点击通知将创建额外的活动,并将它们放在已经运行的活动之上。我怎样才能防止这一点?是否有一个很好的检查来确定某个活动目前是正在显示还是已加载?
这就是它应该默认的方式。如果您只想要单个实例,则可能需要指定android:launchMode="singleTop"
。
有4种发射模式,这里更多的信息:https://developer.android.com/guide/topics/manifest/activity-element.html
当使用lanchMode="singleTask"
,如果你的活动的实例已经存在,Android不重新创建活动,但与onNewIntent()
方法启动它。
如记录由Android:
该系统在一个新的任务和路线的意图,它的根目录创建活动。但是,如果活动的实例已经存在,则系统通过调用onNewIntent()方法将意图路由到现有实例,而不是创建新实例。
由于两个答案上面所提到的,你要的是设定在活动的定义定义清单中的应用程序的启动模式:
<activity
android:name="com.company.ActivityName"
android:launchMode="singleTask">
</activity>
另外,您可能要注意的是,尽管FLAG_ACTIVITY_SINGLE_TOP是一个有效的Intent标志,但没有用于singleTask或singleInstance的等效意图标志。
详情请参见在不同的启动模式选项的launchMode部分:http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
是FLAG_ACTIVITY_NEW_TASK不等于singleTask? – CopsOnRoad 2018-01-02 14:43:01
将其设置为“singleTask”解决我的问题。谢谢你的协助! – pgsandstrom 2010-02-25 09:05:32