在活动和服务之间共享数据时是否需要同步?

时间:2015-11-27 00:13:58

标签: android multithreading synchronization

我一直在阅读有关如何在活动和服务之间共享数据的信息。我找到了一些答案herehere。我计划创建一个单例类,因为这似乎是共享状态的最低开销机制。

对于我的应用程序,我有一项服务,即获取和记录各种传感器数据,并填充具有最新状态的数据结构,然后通知活动以使用此信息更新UI(如果活动可见)。如果活动不可见,那么当它变得可见时,它会查询状态信息以更新UI。

我没有看到是否有必要进行同步。例如,UI线程是否有可能将数据从结构中拉出并被服务中断,然后服务将新数据放入其中,从而导致UI被错误地呈现?此外,我想在各种数据上放置一个标志,以便前端知道哪些部分已经更新:服务将设置一个布尔值,活动将清除它。这似乎可能发生类似的问题。

我是否需要担心这一点,或者活动中的UI线程和服务中的(例如)Listener或Receiver线程是否无法相互中断。如果可以,使用同步方法访问数据结构是否足够?

1 个答案:

答案 0 :(得分:1)

  

例如,UI线程是否可能将数据从结构中拉出并被服务中断,然后将新数据放入其中,从而导致UI被错误地呈现?

可能。 Service通常具有后台线程,无论您是创建它们还是从特定Service实现中获取它们(例如,IntentService用于onHandleIntent()的线程)。同步不是组件(活动,服务等)的问题,而是线程的问题。

  

如果可以,使用同步方法访问数据结构是否足够?

嗯,就个人而言,我尝试使用来自java.util.concurrentjava.util.concurrent.atomic的同步对象和集合。根据您正在做的事情以及您的工作方式,synchronized方法可能是一个很好的解决方案。