1

我创建了一个托管 ContentObserver (C) 的服务 (S)。C 跟踪一些数据并记录对数据库所做的更改 (D)。

S 也有一个计时器,它按时间间隔将 D 的内容转储到文件中。

我的服务在我的手机上运行,​​一段时间内一切似乎都很好(几个小时左右)。然后突然停止记录对数据所做的更改并停止转储到文件。我尝试更改数据(在 C 上引发 onChange)并在手机中浏览以保持设备处于唤醒状态,但什么也没发生 - 服务仍然处于非活动状态。S 仍在运行,当我连接到笔记本电脑时,我在日志中看不到任何错误。

我的猜测是服务正在休眠(没有 CPU 切片)。我读过一些关于唤醒锁的文章,但我不想强迫手机一直处于唤醒状态。()。另一种方法是创建一个重复警报,每 T 分钟执行一次 C 的工作(轮询)。我更喜欢 ContentObservers 的想法,因为用户可以在更新之间更改(尤其是删除)数据。使用 ContentObserver,我将获得所有更改,而不仅仅是定时间隔的快照。

关于如何定期唤醒我的服务的任何想法?

最好的问候弗雷德里克

4

1 回答 1

0

您可以使用 AlarmManager 以设定的时间间隔广播待处理的意图。如果您使用 RTC_WAKEUP 类型,它甚至会在设备处于睡眠状态时被发送。

Intent intent = new Intent("android.intent.action.DO_SOMETHING");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

AlarmManager alarmManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60*60*1000, pendingIntent);

然后只需为意图注册一个广播接收器并执行您必须执行的操作。请注意,广播接收器在 aprox 之后超时。10 秒,所以如果您的任务很长,请使用服务

于 2011-11-02T15:11:15.333 回答