Отображение строки состояния уведомления от сервиса в Android

Привет, у меня какая-то глупая проблема. Я пытаюсь отобразить уведомление от службы. Когда начинается действие, я вызываю startService следующим образом:

      Intent myIntent = new Intent(getApplicationContext(),notif_service.class);
      startService(myIntent); 

служба рассчитывает что-то и должна отобразить уведомление и затем остановиться. код выглядит следующим образом:

    if (limit_time_value == 2 && start >= 6300000 && notif_past)
     {  

        notif_past=false;
        showNotification();
        stopSelf(); 

     }

Есть два способа, которыми эта служба может быть остановлена, эфир из себя с помощью stopSelf() или кнопка в моей активности с

           Intent myIntent = new Intent(getApplicationContext(),notif_service.class);
      stopService(myIntent);

проблема в том, что даже когда я останавливаю службу, уведомление показывается по истечении указанного времени. Я попытался остановить setvice с помощью Binding, а затем вызвал onDestroy(), в котором я отменил уведомление и снова вызвал stopSelf(). Снова показывается уведомление.

Что я делаю неправильно? Я неправильно понимаю, как работают уведомления или службы?

2 ответа

Решение

Вы не указываете точно, где вы выполняете работу, показанную во втором фрагменте кода выше.

  • Если эта работа делается в onStart() или же onStartCommand()эта работа выполняется в главном потоке приложения, и поэтому, как только она запускается, она блокирует всю другую работу основного потока приложения, такую ​​как stopService() а также onDestroy(),

  • Если эта работа выполняется в фоновом потоке, который вы создаете, если вы не завершаете этот фоновый поток, этот поток будет продолжать выполнение независимо от того, уничтожена ли служба. Вам нужно будет договориться о прекращении потока самостоятельно.

Вызовите экземпляр класса NotificationManager, который вы вызвали внутри showNotification() функция.

Например, я использовал:

NotificationManager nm=(NotificationManager)this.getSystemService(this.NOTIFICATION_SERVICE);
nm.notify(1,builder.build());

Если вы сделали что-то подобное для создания своего уведомления, используйте тот же экземпляр, чтобы отменить его, вызвав cancel() функция и прохождение notificationId (в данном случае 1).

Например:

nm.cancel(1);

Здесь 1 обозначает notificationID который вы предоставили при его создании.

Другие вопросы по тегам