使用IntentService执行重复的任务

时间:2011-05-24 14:04:11

标签: android service

我必须在服务中执行重复的任务(从互联网下载数据)。我使用以下代码完成了任务:

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运行吗?

1 个答案:

答案 0 :(得分:0)

如果整体服务不会很长,如果mDelay很短(一分钟或更短),您可能只想坚持原始实施。

如果mDelay很长,则应使用AlarmManager,因此您的服务仅在内存中正常工作。在这种情况下,AlarmManager警报正在处理周期性重复。