我已经创建了一个发送电子邮件的服务(email service)……每次我需要用我的应用发送电子邮件时,它都会启动服务并通过一个意图传递电子邮件的ID…
我使用startforeground(id_of_email, mynotifcation);来防止它被杀死,并向用户显示电子邮件发送状态的通知。
我需要允许用户同时发送多封电子邮件,因此当用户需要发送另一封电子邮件时,它会再次以新的意图(电子邮件的不同ID)调用startservice。因此它会再次调用startforeground(new_id_of_email, mynotifcation);
问题是对startforeground的新调用覆盖了以前的通知…(因此用户失去了先前的通知,不知道先前的电子邮件发生了什么)

最佳答案

查看Service.startForeground()源代码可以发现,多次调用startforeground只会替换当前显示的通知。事实上,对startforeground的调用与stopForeground()相同,只是removeNotification设置始终为true。
如果您希望服务为正在处理的每个电子邮件显示通知,则必须从服务中分别管理每个通知。

public final void startForeground(int id, Notification notification) {
    try {
        mActivityManager.setServiceForeground(
                new ComponentName(this, mClassName), mToken, id,
                notification, true);
    } catch (RemoteException ex) {
    }
}

public final void stopForeground(boolean removeNotification) {
    try {
        mActivityManager.setServiceForeground(
                new ComponentName(this, mClassName), mToken, 0,
                null, removeNotification);
    } catch (RemoteException ex) {
    }
}

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r1/android/app/Service.java#Service.startForeground%28int%2Candroid.app.Notification%29

07-24 09:33