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

Java Android服务-检查变量是否在一段时间内异步变化?,java,android,Java,Android,假设我有一个布尔运算。在我的服务中,我想运行某种计时器机制,如果这个布尔值改变了状态,调用一些函数X,否则什么也不做 最好的方法是什么?我尝试过使用计时器,但没有效果,我不确定带有postDelayed的处理程序是否适合这样做,因为布尔值可以来回更改状态,这可能会给我一个isAction永不更改的“假阳性” 有关更多背景信息,将触发启动服务的意图。此服务需要确定布尔isAction是否保持不变大约一秒钟,如果保持不变,则执行一些操作,否则返回,不执行任何操作 谢谢 您不能让服务只是不时地醒来并检

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

最好的方法是什么?我尝试过使用计时器,但没有效果,我不确定带有postDelayed的处理程序是否适合这样做,因为布尔值可以来回更改状态,这可能会给我一个isAction永不更改的“假阳性”

有关更多背景信息,将触发启动服务的意图。此服务需要确定布尔isAction是否保持不变大约一秒钟,如果保持不变,则执行一些操作,否则返回,不执行任何操作


谢谢

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

解决方案是,在布尔值更改时,放置一个触发事件的服务,并根据事件源(可观察对象)注册服务

因此,不需要定期检查,服务将在布尔值发生更改时立即知道这些更改

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

问候,, 圣菲


stéphane

我最近做了一件类似的事情,将布尔值存储在共享首选项中,然后实现了RegisterOnSharedReferenceChangeListener,它将注册一个回调,以便在首选项发生更改时调用。查看文档了解更多信息:

是的,这是完全相同的解决方案。Oberser观察到的模式,但这一个使用的是SharedReferenceMechanism。这可能会提供一个更轻的代码,因为您不必实现事件机制的源代码部分,但是akward可以将始终使用SharedReferences作为一种架构选择,只是为了得到属性更改的通知……是的,但是如果这只是您试图跟踪的一个布尔值,那么它肯定会更容易!我通常只在1时使用观察者可观察部分。抽象有两个方面,一个依赖于另一个。将这些方面封装在单独的对象中,可以独立地改变和重用它们。2.当对一个对象的更改需要更改其他对象时,您不知道需要更改多少个对象。3.当一个对象应该能够通知其他对象而不必假设这些对象是谁时。换句话说,您不希望这些对象紧密耦合。