从IntentService传递数据

时间:2015-03-21 20:01:29

标签: java android android-intent android-fragments intentservice

我有以下流程:
ActivityA / FragmentA通过意图传递给ActivityB / FragmentB一个自定义的大型对象 对象的属性包括List<CustomObject> items
用户按下FragmentB中的小部件,然后FragmentB启动ActivityC / FragmentC,同时传递应该在其UI 中显示详细信息的自定义对象(Parcelable)也启动Service来获取列表填充该特定对象的items 当Service从后台HTTP调用中获取结果时,我需要更新UI中预期显示这些项目的列表。 此列表位于FragmentC中,其中包含items null的自定义对象的副本 Service包含自定义对象的另一个副本,而items刚刚获取但无法更新片段列表。
创建片段的静态变量并分配this,然后在片段中公开Service可以调用以传递项目的公共方法,但非常脏。
我想知道什么是干净/标准设计?

1 个答案:

答案 0 :(得分:1)

  

我正在使用LocalBroadcastManager,但列表相当大,我不确定是否通过意图传递它是个好主意

通常,当我们使用Intent时,它是跨越进程边界,因此必须将Intent转换为字节数组(通过Parcel),这对大数据来说是一个问题。 LocalBroadcastManager不会这样做 - 它只是按原样传递Intent对象。

LocalBroadcastManager的缺点是消息 Intent,并且因为Intent通常用于IPC,所以它对数据类型有限制。就个人而言,我推荐greenrobot的EventBus,甚至是LocalBroadcastManager的Square's Otto。话虽如此,如果您将数据放入Intent很容易,那么尺寸应该不是问题。