Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在服务和活动之间共享数据的最有效方式_Android_Android Fragments_Service - Fatal编程技术网

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

Android 在服务和活动之间共享数据的最有效方式,android,android-fragments,service,Android,Android Fragments,Service,我目前正在开发一个应用程序,它由一个一直运行的后台IntentService(即使活动失去焦点)和一个活动(带有片段的分区寻呼机)组成 后台服务经常检查时间,并存储从xml文件解析的大量对象(最多300个) 每个对象表示一个具有关联startTime的事件,当此startTime与当前时间匹配时,服务必须通知活动(如果可用)以显示事件正在发生 在活动端,我有一个带有自定义arrayAdapter的片段(section pager的选项卡),用于将事件列表到ListView中 现在我所做的是使用L

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

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

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

在活动端,我有一个带有自定义arrayAdapter的片段(section pager的选项卡),用于将事件列表到ListView中

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

由于每个片段都必须保留一个arrayList来更新ArrayAdapter,然后更新ListView,因此我最终得到了存储在服务数组和片段数组中的同一个对象。我想知道是否有更好的办法

问题:在我的服务和我的活动之间共享大量对象的最有效方式(内存/cpu使用率和速度)是什么。我认为你无法避免重复数据。如果要在服务和片段中使用相同的对象实例,则必须注意每次都通知适配器,否则会出错

最好将下载的对象存储在本地SQLite数据库中,只加载片段中所需的最少信息量。这将最大限度地减少将数据从IntentService线程传输到活动主线程所需的时间(因为您甚至不会传输数据,只需向当前片段发送数据已更新的信号)。A也可以帮助你


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

用户syncronus handler可查看此链接。它讨论了一些关于事件总线和单例的内容。谢谢你们提供的所有信息,我来看看greenrobot。关于SQLite数据库,它不会影响性能吗?只要您在后台线程上插入数据并使用高效的SQL插入,就可以了。