Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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
Java 从IntentService传递数据_Java_Android_Android Intent_Android Fragments_Intentservice - Fatal编程技术网

Java 从IntentService传递数据

Java 从IntentService传递数据,java,android,android-intent,android-fragments,intentservice,Java,Android,Android Intent,Android Fragments,Intentservice,我有以下流程: ActivityA/FragmentA通过一个定制的较大对象传递给ActivityB/FragmentB。 对象的属性中有一个列表项 用户在FragmentB中按下一个小部件,然后FragmentB启动ActivityC/FragmentC,同时传递应该在其UI中显示详细信息的自定义对象(可包裹),并且还启动一个服务,以获取填充该特定对象的项的列表。 当服务从后台HTTP调用获取结果时,我需要更新UI中的列表,该列表将显示获取的这些项目。 此列表位于FragmentC中,其中包含

我有以下流程:
ActivityA/FragmentA通过一个定制的较大对象传递给ActivityB/FragmentB。
对象的属性中有一个
列表项

用户在FragmentB中按下一个小部件,然后FragmentB启动ActivityC/FragmentC,同时传递应该在其UI中显示详细信息的自定义对象(可包裹),并且还启动一个
服务
,以获取填充该特定对象的
项的列表。
当服务从后台HTTP调用获取结果时,我需要更新UI中的列表,该列表将显示获取的这些项目。 此列表位于FragmentC中,其中包含带有
项的自定义对象的副本
为空。
服务
有另一个自定义对象副本和刚刚获取的
,但无法更新片段列表。
为片段创建一个静态变量,并分配
this
,然后在片段中公开一个公共方法,
服务可以调用该方法来传递项目,但效果很差。
我想知道这是什么样的干净/标准设计

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

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


LocalBroadcastManager
的缺点是消息是
Intent
,并且由于
Intent
通常用于IPC,因此它对数据类型有限制。就我个人而言,我推荐greenrobot的EventBus,或者甚至Square的Otto,而不是
LocalBroadcastManager
,正是出于这个原因。也就是说,如果您很容易将数据放入
意图中,那么大小不应该是一个问题。

如我所述,使用事件总线,在其他答案中。@commonware:我使用的是LocalBroadcastManager,但列表相当大,我不确定通过intent传递它是否是一个好主意。我不清楚您所说的
跨进程边界是什么意思。每个片段都是一个独立的过程?它们不仅仅是同一进程空间中的类?@Jim:“每个片段都是一个单独的进程?”--不,但通常不会将
Intent
对象与片段一起使用。将
Intent
对象与
startActivity()
startService()
sendBroadcast()
等方法一起使用。即使所讨论的活动/服务/接收者恰好在您自己的流程中,也会跨越流程边界。这就是为什么通常大小是
意图的问题
LocalBroadcastManager
是本地的,不受相同的限制。所以Android中默认的机制是通过最适合IPC调用的基础设施提供的?@Jim:我不知道你认为“默认机制”是什么。@Jim:“使用共享数据模型和单例管理器,可能会导致数据丢失,例如在暂停时”这取决于你如何实施它。“其他方法会发生这种情况吗?”——这也取决于您如何实现它。这与你最初的问题相去甚远。