Используйте IntentService для выполнения повторяющихся задач - PullRequest
0 голосов
/ 24 мая 2011

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

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 вместо службы и переместить mHandler.post(mTask); в onHandleIntent, код выполняется только 1 раз, потому что тогда IntentService уничтожается.

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

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

1 Ответ

0 голосов
/ 24 мая 2011

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

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

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