Таймер фоновой службы Android не работает должным образом - PullRequest
1 голос
/ 01 мая 2019

У меня есть приложение для Android.Это приложение отправляет информацию о местоположении на сервер каждые 15 секунд.У меня есть фоновый сервис и таймер.Я сохранил в файл журналы приложений.Когда я изучал журналы, я увидел, что таймер иногда не работает должным образом.Проблема возникает только тогда, когда приложение перешло в фоновый режим.Какова лучшая практика фоновых задач android?

Timer timer = new Timer();
timer.schedule(new mainTask(), 0, 15000);

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_NOT_STICKY;
}

Журналы отметок времени вызовов потоков.

//for example, thread didn't work 2 minutes. 
17:19:35.627
17:21:31.201
thread didn't work 4 minutes.
17:25:23.573 
thread didn't work 4 minutes.
17:29:35.345

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

Пожалуйста, попробуйте использовать Handler вместо Timer.

private Handler handlerUpdateLocation;

Также запустите свою ручку внутри onStartCommand() метода.

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    if (handlerUpdateLocation == null) {
        handlerUpdateLocation = new Handler();
        handlerUpdateLocation.post(runnableUpdateLocation);
    }

    return START_STICKY;
}

Используйте этот исполняемый файл для выполнения кода каждые 15 секунд.

private Runnable runnableUpdateLocation = new Runnable() {

    @Override
    public void run() {
        // TODO: You can send location here
        handlerUpdateLocation.postDelayed(this, 15000);
    }
};
0 голосов
/ 02 мая 2019

В более новых версиях Android установлен предел фонового выполнения , и вы можете столкнуться с такого рода проблемами при попытке запуска задач в фоновом режиме.

Вы можете рассмотреть возможность использования JobScheduler, который может помочь вам в этом случае. Здесь хороший учебник по реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...