Я делаю кнопки буксировки, одну для запуска службы, а другую для ее остановки.
когда я нажимаю кнопку «Стоп», уведомляю меня, что служба остановлена, но на самом деле она все еще работает в фоновом режиме.
я использую таймер в моем методе 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
обновляю вопрос..
Я нашел свой ответ в самом вопросе. Ответ - необходимо отменить Timer и TimerTask в методе onDestroy. Я тестирую его, и он работает хорошо.




Если вы собираетесь остановить службу, которую вы запускаете, вы должны вызвать stopService(Intent) бывший:
Intent intent = new Intent(MainActivity.this, YourService.class);
stopService(intent);
Я использую эту треску, но она все еще работает
вы должны переопределить метод onDestory() и остановить на нем свой таймер.
Вот упрощенное описание того, как остановить службы:
stopSelf() используется для остановки текущего сервиса.
stopSelf(int startId) также используется для остановки текущей службы, но только в том случае, если startId был идентификатором, указанным при последнем запуске службы.
stopService(Intent service) используется для остановки служб, но из-за пределов службы для остановки.
посетите этот связь для более подробной информации
пожалуйста, замените
return START_STICKY;
к
return START_NOT_STICKY;
Разница:
START_STICKY
система попытается воссоздать ваш сервис после того, как он будет убит
START_NOT_STICKY
система не будет пытаться воссоздать ваш сервис после того, как он будет убит
Я использую это, но не работает... проблема в таймере и задаче таймера, вы должны отменить их в методе уничтожения
пожалуйста, проверьте мое редактирование
спасибо за ваш ответ .. Я пытаюсь это сделать, но также не работаю с проблемой в Timer и TimerTask, вы должны сначала отменить их задачу в методе onDestroy (), и она остановится
Так почему бы вам просто не создать внутри службы функцию, которая остановит таймер, а затем вызвать ее после остановки службы?
я просто знаю, что из другого вопроса, подобного этому, и я редактирую свой вопрос. Я думал, что когда я остановлю службу, он остановит все задачи, включая таймер и timerTask
Пожалуйста, укажите свой класс обслуживания и то, как вы вызываете свою службу, чтобы мы могли устранить неполадки :)