为什么通知会打开另一个活动实例?

时间:2012-05-06 19:30:19

标签: android android-service android-notifications

我有一项通过按下按钮启动服务的活动。在服务初始化期间,如果发生错误,则会通过通知显示此错误,如下所示:

String tickerText = getString(R.string.init_error);

Notification notification = new Notification(
        R.drawable.ic_stat_notify_msg,
        tickerText, System.currentTimeMillis());

PendingIntent notificationIntent = PendingIntent.getActivity(
        this, 0, new Intent(this, MyServiceActivity.class), 0);

notification.setLatestEventInfo(this,
        getText(R.string.init_error_tts_title),
        getText(R.string.init_error_tts_text),
        notificationIntent);

NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
nm.notify(R.string.init_error, notification);

stopSelf();

当状态栏中出现通知时,我打开通知窗口。然后,当我点击通知时,会启动一个新的MyServiceActivity实例......为什么?

3 个答案:

答案 0 :(得分:5)

尝试在清单上的活动代码中添加此属性:

android:launchMode=["multiple" | "singleTop" |
                    "singleTask" | "singleInstance"]

singleTopsingleInstance

Activity Element Documentation

答案 1 :(得分:2)

我有一个具有初始启动器活动的音乐播放器,然后是选择活动,然后是播放器。通知需要将用户返回给玩家。我使用了Christophe的想法并发现了

android:alwaysRetainTaskState="true"
android:launchMode="singleTop"

在玩家活动的manfest活动标签中给了我正确的行为。然后确保您的通知调用PLAYER ACTIVITY类。我起初并没有这样做。它调用了应用程序启动器类,虽然这对于较新的Androids来说没问题,但它给我留下了Android 2.3.6中的额外活动问题。现在一切都很好。

如果我的活动修复不适合您,您将不得不通过

中的选择来强制执行

http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

我应该补充说我的播放器是无状态的,只有四个按钮连接到服务。但是,如果您的活动需要在通知的意图进入时设置状态,则需要覆盖onNewIntent:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
}

对克里斯托夫的称赞。这是一个难以得到正确答案的问题。

答案 2 :(得分:-1)

设置正确的启动模式,或添加所需的意图标记。