问题描述
|
假设我有一个布尔isAction。在我的服务中,我想运行某种计时器机制,如果此布尔值更改状态,请调用某些函数X,否则不执行任何操作。
最好的方法是什么?我尝试使用计时器无济于事,并且我不确定具有postDelayed的处理程序是否适合执行此操作,因为布尔值可以来回更改状态,这可能会给我一个\“ false isAction的“正”永不更改。
有关更多背景信息,将激发一个意图以启动服务。该服务需要确定布尔isAction是否保持相同大约一秒钟左右,如果是,则采取一些措施,否则返回并什么也不做。
谢谢。
解决方法
最近,我通过将布尔值存储在共享的首选项中来做类似的事情,然后实现了registerOnSharedPreferenceChangeListener,它将注册对首选项发生更改时要调用的回调。请查看文档以获取更多信息:http://developer.android.com/reference/android/content/SharedPreferences.html
, 您不能仅使服务不时地唤醒并检查布尔值的更改。如您所说,它可能会给“假阳性”,如果它们出现两次,则不会看到任何变化。
解决方案是放置一个可观察到的观察者设计模式,该模型将在布尔值更改其值时触发一个事件,并提供将其自身注册到事件源(可观察到的)的服务。
因此,将不需要定期检查,服务将在布尔值发生变化时立即知道它们的变化。
您还可以放置一个直接方法调用以通知您的服务值更改,但这将意味着您的服务将始终启动。可能是这种情况。在这种情况下,最好将您的活动绑定到服务并通过其IBinder接口调用其方法。
问候,
斯特凡
斯特凡