我有以下流程:
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
可以调用以传递项目的公共方法,但非常脏。
我想知道什么是干净/标准设计?
答案 0 :(得分:1)
我正在使用LocalBroadcastManager,但列表相当大,我不确定是否通过意图传递它是个好主意
通常,当我们使用Intent
时,它是跨越进程边界,因此必须将Intent
转换为字节数组(通过Parcel
),这对大数据来说是一个问题。 LocalBroadcastManager
不会这样做 - 它只是按原样传递Intent
对象。
LocalBroadcastManager
的缺点是消息 是Intent
,并且因为Intent
通常用于IPC,所以它对数据类型有限制。就个人而言,我推荐greenrobot的EventBus,甚至是LocalBroadcastManager
的Square's Otto。话虽如此,如果您将数据放入Intent
很容易,那么尺寸应该不是问题。