Используйте IntentService для выполнения повторяющихся задач

#android #service

#Android #Обслуживание

Вопрос:

Я должен выполнять повторяющиеся задачи (загружать данные из Интернета) в сервисе. Я выполнил задачу с помощью следующего кода:

 public class MyService extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        mHandler.post(mTask);
    return START_STICKY;
    }

    private final Runnable mTask = new Runnable() {
        @Override
        public void run() { 
        downloadData(url); 
        mHandler.postDelayed(this, mDelay);
        }
    };

    @Override
    public void onDestroy() {
        mHandler.removeCallbacks(mTask);
    }
}
  

Если я хочу использовать IntentService вместо service и перейти mHandler.post(mTask); к onHandleIntent, код выполняется только 1 раз, потому что тогда IntentService отключается.

 @Override
public void onHandleIntent(Intent intent) {
    mHandler.post(mTask);
}
  

Могу ли я предотвратить это и запустить IntentService?

Ответ №1:

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

Если mDelay значение long, вам следует использовать AlarmManager , чтобы ваш сервис находился в памяти только во время выполнения работы. В этом случае AlarmManager сигнал тревоги передает периодический повтор.