#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
сигнал тревоги передает периодический повтор.