我必须在服务中执行重复的任务(从互联网下载数据)。我使用以下代码完成了任务:
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,则代码只执行一次,因为那时IntentService被终止。
@Override
public void onHandleIntent(Intent intent) {
mHandler.post(mTask);
}
我可以阻止这种情况并使IntentService运行吗?
答案 0 :(得分:0)
如果整体服务不会很长,如果mDelay
很短(一分钟或更短),您可能只想坚持原始实施。
如果mDelay
很长,则应使用AlarmManager
,因此您的服务仅在内存中正常工作。在这种情况下,AlarmManager
警报正在处理周期性重复。