У меня есть служба переднего плана в Android с собственным потоком, который в начале работает как положено.
У меня есть onStartCommand () , например:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
(...)
t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
myMethod(code);
}
});
}
},0,5000);
return START_STICKY;
}
В myMethod () я проверяю, что каждые 5,0 точных секунд он вызывается.
Проблема заключается в следующем:
После того, как в моей MainActivity onPause () и onStopПри вызове методов () служба продолжает работать, как ожидалось, , но myMethod () вызывается не каждые 5,0 секунд. Теперь, возможно, вызывается дважды или 3 раза в одну и ту же секунду, затем один раз, через 7 секунд и т. Д. С явно случайной частотой.
Я думал, что, возможно, запускается новый поток (но не знаю, как,так как onStartCommand () должен вызываться только один раз в соответствии с документами AFAIR, и я проверил, что он вызывается один раз), но в myMethod () я проверяю с помощью Thread.currentThread (). getId (), что каждый раз кажется, что это один и тот же поток.
Как я и проверил, в моем сервисе не вызываются специальные методы, такие как onCreate (), onTaskRemoved (), onLowMemory (), onDestroy () ...
И я не надеваюдействительно не знаю, что проверить на Таймере, Обработчике или Лупере, чтобы найти еще несколько подсказок и пойти дальше.
Любая помощь будет оценена.
РЕДАКТИРОВАТЬ
Когда активность снова видна пользователю, таймер снова работает идеально каждые 5,0 секунд. Поэтому лучше сказать, что это происходит после метода onStop (), я бы сказал, что это происходит, когда действие выполняется в фоновом режиме.