通过通知启动活动:避免重复活动

时间:2010-02-24 14:22:13

标签: android

所以我目前正在显示通知。当用户单击此注释时,将启动该应用程序。通知仍然存在,表示该服务正在后台运行。

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);

但是,我发现了一个出现错误的情况。如果用户通过单击正常图标启动应用程序,并且在活动正在运行时单击通知,则会启动新活动,而不会退出先前的活动,后者位于较早的活动之上。这还不是全部:进一步点击通知将创建其他活动并将其置于已经运行的活动之上。我怎么能阻止这个?是否有一个很好的检查,以查看某个活动当前是否正在显示或已加载?

3 个答案:

答案 0 :(得分:37)

这就是它默认的方式。如果您只想拥有一个实例,则可能需要指定android:launchMode="singleTop" 这里有4种发布模式,更多信息:https://developer.android.com/guide/topics/manifest/activity-element.html

答案 1 :(得分:11)

使用lanchMode="singleTask"时,如果您的活动实例已存在,Android不会重新创建活动,而是使用onNewIntent()方法启动它。

如Android所述:

  

系统在新任务的根目录下创建活动并将意图路由到该任务。但是,如果活动的实例已经存在,系统会通过调用onNewIntent()方法将意图路由到现有实例,而不是创建新实例。

Android documentation for activity mode

答案 2 :(得分:2)

正如上面提到的两个答案所提到的,你需要设置应用程序的启动模式,该模式在清单中活动的定义中定义:

<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