我在服务中有一个AsyncTask,它获取RSS提要并将它们存储在SQLiteDatabase中。该服务从主Activity开始。我需要执行AsyncTask,然后每隔4个小时左右执行一次,以获取RSS源。我尝试使用TimerTask如下所示,但这似乎不起作用。后台任务只运行一次。关于如何最好地实现这种情况/任何替代方案的任何想法?
public class FeedReader extends Service{
private void getFeedsRegularly() {
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
new BgTask().execute(feedURL);
}
});
}
}, 0, UPDATE_INTERVAL);
}
private class BgTask extends AsyncTask<...>
{...}
}
答案 0 :(得分:2)
对于这样的设定时间表,您应该使用AlarmManager。您可以使用它将应用程序设置为每4小时运行一次。
这不仅是方便,而且还可以提高电池性能,因为您的应用不会在后台持续运行,只是为了每四个小时制作一次AsyncTask。相反,Android将在时机成熟时运行您的应用程序,您可以完成工作,然后等待闹钟再次启动。