Как принудительно остановить службу Android программно

Я делаю кнопки буксировки, одну для запуска службы, а другую для ее остановки. когда я нажимаю кнопку «Стоп», уведомляю меня, что служба остановлена, но на самом деле она все еще работает в фоновом режиме. я использую таймер в моем методе onStartCommand(), повторяющемся каждую секунду это причина..? и как принудительно остановить службу немедленно.

public int onStartCommand(Intent intent, int flags, int startId) {
    Toast.makeText(getApplicationContext(),"start..",Toast.LENGTH_SHORT).show();
    new Timer().scheduleAtFixedRate(new TimerTask() {

        private Handler handler = new Handler(){
            @Override
            public void dispatchMessage(Message msg) {
                Toast.makeText(getApplicationContext(),""+(counter+=1),Toast.LENGTH_SHORT).show();
            }
        };
        @Override
        public void run() {
            handler.sendEmptyMessage(0);
        }
    },0,1000);


    return START_STICKY;
}

`

и мои действия кнопок: -

public void btnStart(View view){

    startService(new Intent(MainActivity.this,MyService.class));

}
public void btnStop(View view){

   stopService(new Intent(MainActivity.this,MyService.class));
}

я нашел ответ ..! ответ должен отменить таймер и timerTask в методе onDestroy

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

Brandon 01.05.2019 03:16

обновляю вопрос..

Noah Mohamed 01.05.2019 05:30

Я нашел свой ответ в самом вопросе. Ответ - необходимо отменить Timer и TimerTask в методе onDestroy. Я тестирую его, и он работает хорошо.

Noah Mohamed 01.05.2019 19:49
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
6 118
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы собираетесь остановить службу, которую вы запускаете, вы должны вызвать stopService(Intent) бывший:

Intent intent = new Intent(MainActivity.this, YourService.class);
stopService(intent);

Я использую эту треску, но она все еще работает

Noah Mohamed 01.05.2019 05:32

вы должны переопределить метод onDestory() и остановить на нем свой таймер.

Shalan93 01.05.2019 16:00
Ответ принят как подходящий

Вот упрощенное описание того, как остановить службы:

stopSelf() используется для остановки текущего сервиса.

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

stopService(Intent service) используется для остановки служб, но из-за пределов службы для остановки.

посетите этот связь для более подробной информации

пожалуйста, замените

return START_STICKY;

к

return START_NOT_STICKY;

Разница:

START_STICKY

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

START_NOT_STICKY

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

Я использую это, но не работает... проблема в таймере и задаче таймера, вы должны отменить их в методе уничтожения

Noah Mohamed 02.05.2019 11:18

пожалуйста, проверьте мое редактирование

ismail alaoui 02.05.2019 13:51

спасибо за ваш ответ .. Я пытаюсь это сделать, но также не работаю с проблемой в Timer и TimerTask, вы должны сначала отменить их задачу в методе onDestroy (), и она остановится

Noah Mohamed 02.05.2019 15:32

Так почему бы вам просто не создать внутри службы функцию, которая остановит таймер, а затем вызвать ее после остановки службы?

ismail alaoui 02.05.2019 15:35

я просто знаю, что из другого вопроса, подобного этому, и я редактирую свой вопрос. Я думал, что когда я остановлю службу, он остановит все задачи, включая таймер и timerTask

Noah Mohamed 02.05.2019 16:23

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