Связь между отображением уведомления и жизненным циклом службы переднего плана

В моем приложении я сделал службу на переднем плане и отображал уведомление для пользователя. notification.setAutoCancel(false); Я установил, что значок уведомления всегда отображается без автоматической отмены.

На самом деле мне нужно, чтобы эта служба работала в течение длительного периода времени, и я хочу, чтобы пользователь знал об этом (увидев значок уведомления, который они знают, что служба все еще работает).

Поэтому мне интересно, верна ли моя гипотеза, пока отображается значок уведомления, это означает, что служба все еще работает, а когда значок уведомления исчезает, это означает, что служба выполняется по некоторым причинам.

Вот упрощенный код:

LongLiveService extends Service{
    private MyThread thread;

    onStartCommand() {
        thread.start();
        createNotification(this);
    }

    createNotification(Context context) {
        // build a notification
        notification.setAutoCancel(false);
        startForeground.invoke(this, notificationID, notification.build());
    }
}


MyThread extends Thread{
    run() {
        // doing something all the time
    }
}

person xl45    schedule 07.10.2015    source источник


Ответы (1)


Вы написали:

когда значок уведомления исчезнет, ​​это означает, что услуга по некоторым причинам выполнена.

Если вы хотите, чтобы ваше уведомление оставалось в строке состояния, пока работает Service, вам нужно сделать уведомление постоянным с помощью флага FLAG_ONGOING_EVENT, чтобы его нельзя было отклонить:

Notification notification = new Notification(...);
PendingIntent pendingIntent = PendingIntent.getActivity(..., Notification.FLAG_ONGOING_EVENT);        
notification.flags = Notification.FLAG_ONGOING_EVENT;
notification.setLatestEventInfo(..., pendingIntent);
mNotificationManager.notify(1, notification);
person onosendai    schedule 07.10.2015
comment
спасибо за ответ, я использую PendingIntent.getActivity(... , PendingIntent.FLAG_UPDATE_CURRENT);, и до сих пор это работает нормально, так в чем разница между FLAG_UPDATE_CURRENT и FLAG_ONGOING_EVENT, я прочитал документ Google, и это сбивает с толку. - person xl45; 08.10.2015