Android服务 - 检查变量是否在一段时间内异步变化?

时间:2011-06-23 18:34:04

标签: java android

假设我有一个布尔值isAction。在我的服务中,我想运行某种计时器机制,如果这个布尔值改变状态,调用一些函数X,否则什么都不做。

最好的方法是什么?我尝试使用定时器无济于事,我不确定使用postDelayed的处理程序是否适合这样做,因为布尔值可以来回改变状态,这可能会给我一个“假阳性” isAction永远不会改变。

有关更多背景信息,会触发一个启动服务的intent。此服务需要确定boolean isAction是否在大约一秒左右保持不变,如果是,则执行一些操作,否则返回并且不执行任何操作。

感谢。

2 个答案:

答案 0 :(得分:1)

您无法保持服务只是偶尔醒来并检查布尔值的变化。正如你所说,它可能会给出“假阳性”,如果它们发生两次,则看不到任何变化。

解决方案是放置一个observable-observer design pattern,它将在布尔值更改其值时触发事件,并将服务注册到事件源(可观察的)。

因此不需要定期检查,服务一旦发生就会意识到布尔值的变化。

您还可以进行直接方法调用以通知您的服务值更改,但这意味着您的服务将始终启动。情况可能就是这样。在这种情况下,最好将您的活动绑定到服务并通过其IBinder接口调用其方法。

此致  斯特凡

斯特凡

答案 1 :(得分:1)

我最近通过在共享首选项中存储布尔值来做类似的事情,然后我实现了registerOnSharedPreferenceChangeListener,它将注册一个在首选项发生更改时调用的回调。有关详细信息,请查看文档:{​​{3}}