我一直在阅读有关如何在活动和服务之间共享数据的信息。我找到了一些答案here和here。我计划创建一个单例类,因为这似乎是共享状态的最低开销机制。
对于我的应用程序,我有一项服务,即获取和记录各种传感器数据,并填充具有最新状态的数据结构,然后通知活动以使用此信息更新UI(如果活动可见)。如果活动不可见,那么当它变得可见时,它会查询状态信息以更新UI。
我没有看到是否有必要进行同步。例如,UI线程是否有可能将数据从结构中拉出并被服务中断,然后服务将新数据放入其中,从而导致UI被错误地呈现?此外,我想在各种数据上放置一个标志,以便前端知道哪些部分已经更新:服务将设置一个布尔值,活动将清除它。这似乎可能发生类似的问题。
我是否需要担心这一点,或者活动中的UI线程和服务中的(例如)Listener或Receiver线程是否无法相互中断。如果可以,使用同步方法访问数据结构是否足够?
答案 0 :(得分:1)
例如,UI线程是否可能将数据从结构中拉出并被服务中断,然后将新数据放入其中,从而导致UI被错误地呈现?
可能。 Service
通常具有后台线程,无论您是创建它们还是从特定Service
实现中获取它们(例如,IntentService
用于onHandleIntent()
的线程)。同步不是组件(活动,服务等)的问题,而是线程的问题。
如果可以,使用同步方法访问数据结构是否足够?
嗯,就个人而言,我尝试使用来自java.util.concurrent
和java.util.concurrent.atomic
的同步对象和集合。根据您正在做的事情以及您的工作方式,synchronized
方法可能是一个很好的解决方案。