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

问题描述

| 假设我有一个布尔isAction。在我的服务中,我想运行某种计时器机制,如果此布尔值更改状态,请调用某些函数X,否则不执行任何操作。 最好的方法是什么?我尝试使用计时器无济于事,并且我不确定具有postDelayed的处理程序是否适合执行此操作,因为布尔值可以来回更改状态,这可能会给我一个\“ false isAction的“正”永不更改。 有关更多背景信息,将激发一个意图以启动服务。该服务需要确定布尔isAction是否保持相同大约一秒钟左右,如果是,则采取一些措施,否则返回并什么也不做。 谢谢。     

解决方法

        最近,我通过将布尔值存储在共享的首选项中来做类似的事情,然后实现了registerOnSharedPreferenceChangeListener,它将注册对首选项发生更改时要调用的回调。请查看文档以获取更多信息:http://developer.android.com/reference/android/content/SharedPreferences.html     ,        您不能仅使服务不时地唤醒并检查布尔值的更改。如您所说,它可能会给“假阳性”,如果它们出现两次,则不会看到任何变化。 解决方案是放置一个可观察到的观察者设计模式,该模型将在布尔值更改其值时触发一个事件,并提供将其自身注册到事件源(可观察到的)的服务。 因此,将不需要定期检查,服务将在布尔值发生变化时立即知道它们的变化。 您还可以放置一个直接方法调用以通知您的服务值更改,但这将意味着您的服务将始终启动。可能是这种情况。在这种情况下,最好将您的活动绑定到服务并通过其IBinder接口调用其方法。 问候,  斯特凡 斯特凡     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...