Как повторить задачу в отдельном потоке снова и снова отменить при выходе из приложения?

Мне нужно проверить, нет ли подключения к Интернету, сохранить данные и через некоторое время проверить подключение к Интернету. Если он существует, отправьте данные, в противном случае задачи нужно будет повторять снова, пока не появится подключение к Интернету. Эти проверки необходимо выполнять, когда приложение находится в режиме переднего плана, если приложение находится в фоновом режиме, эти проверки могут быть отменены.

Я хотел бы знать, стоит ли использовать AlarmManager или TimerTask?

Мне кажется, что AlarmManager - правильное решение, но оно работает, даже если приложение находится в фоновом режиме.


person I.S    schedule 24.05.2015    source источник


Ответы (1)


Я бы реализовал это следующим образом:

  1. When you want to send your data over the network, check if there is an internet connection.
    1. if there is, send the data.
    2. если где-то не хранятся данные.
  2. Зарегистрируйте BroadcastReceiver для CONNECTIVITY_ACTION-события. Этот приемник будет вызываться всякий раз, когда происходит некоторое изменение в подключении.
  3. При вызове получателя проверьте наличие соединения и отреагируйте соответствующим образом.

Если вы хотите, чтобы ваше приложение отправляло данные только тогда, когда оно находится на переднем плане, вы можете зарегистрируйте BroadcastReceiver, когда ваше приложение "выйдет на передний план" и отмените регистрацию, когда он "перейдет в фоновый режим".

Определение того, находится ли приложение на переднем плане, является сложной частью и зависит от того, как вы его определяете. Если вы определяете это как «отображается определенный (набор) действий», то вы можете зарегистрироваться в onStart() и отменить регистрацию в onStop.

Мое предложение состояло бы в том, чтобы запустить службу в BoradcastReceiver для обработки отправки ваших данных, даже если приложение не находится на переднем плане. Таким образом, вы отправляете свои данные как можно скорее, даже если пользователь какое-то время не возвращается в ваше приложение.

person Lukas Knuth    schedule 24.05.2015