【问题标题】:Is sychronization required when sharing data between Activity and Service?Activity和Service共享数据时需要同步吗?
【发布时间】:2015-11-27 08:18:33
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android multithreading synchronization


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      相关资源
      最近更新 更多