在服务和活动之间共享数据的最有效方法

时间:2014-09-10 13:36:37

标签: android android-fragments service

我目前正在开发一个应用程序,该应用程序由一直运行的后台IntentService(即使活动失去焦点)和一个Activity(一个带有片段的分页器)组成。

后台服务经常检查时间并存储从xml文件解析的大量对象(最多300个)。

每个对象代表一个具有关联 startTime 的事件,当此 startTime 与当前时间匹配时,服务必须通知活动(如果可用)以显示该事件正在发生。

在活动方面,我有片段(截面分页器的标签)和自定义arrayAdapter,用于将事件列入ListView。

现在我正在做的是使用LocalBroadcastManager从我的服务发送我的对象。片段是监听的,当它们接收到对象时,它们只需通过替换它并通知ArrayAdapter数据集发生变化来更新其本地Arraylist。

由于每个片段都必须保持一个arrayList来更新ArrayAdapter然后更新ListView,我最终会将相同的对象存储在服务的数组内和一个片段的数组中。我想知道是否有更好的方法。

问题:在我的服务和活动之间共享大量对象的最有效(内存/ CPU使用和速度)方式是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用greenrobot's EventBus。我认为你不能避免重复数据。如果您将在服务和片段中使用相同的对象实例,则必须每次都注意通知适配器,否则您将收到错误。

最好将下载的对象存储在本地SQLite数据库中,并且只加载Fragments中所需的最少量信息。这将最小化将数据从IntentService线程传输到Activity的主线程所花费的时间(因为您甚至不会传输数据,只是将信号发送到数据已更新的当前Fragment)。 ContentObservable也可以帮助您。

此外,您不应将IntentService用于一直运行的任务。 IntentService旨在运行单个任务并完成,在您下次需要它运行另一个任务时再次启动。您应该在其中使用带有Thread或HandlerThread的普通服务。您可以通过这种方式更好地控制,如果需要,您还可以并行运行多个任务。