我创建了一个托管ContentObserver(C)的服务(S)。 C跟踪一些数据并记录对数据库所做的更改(D)。
S还有一个计时器,它以定时的间隔将D的内容转储到文件中。
我的服务在我的手机上运行,一切似乎都很好(一两个小时左右)。然后突然停止记录对数据所做的更改并停止转储到文件。 我尝试更改数据(激发onChange on C)并在手机中浏览以保持设备清醒但没有任何反应 - service stil inactive。 S仍在运行,当我连接到笔记本电脑时,我发现日志中没有错误。
我的猜测是服务正在休眠(没有CPU切片)。我已经阅读了一些关于唤醒锁的内容,但我不想强迫手机一直保持清醒状态。 ()。 另一种方法是创建一个重复警报,每隔T分钟(轮询)执行C的工作。 我更喜欢ContentObservers的想法,因为用户可以在更新之间更改(尤其是删除)数据。使用ContentObserver,我将获得所有更改,而不仅仅是定时间隔的快照。
关于如何在常规基础上唤醒我的服务的任何想法?
祝你好运 弗雷德里克
答案 0 :(得分: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秒,所以如果你有一个长任务,请使用服务