Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.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 - Fatal编程技术网

Android 为什么将对象列表从一个活动传递到另一个活动如此麻烦

Android 为什么将对象列表从一个活动传递到另一个活动如此麻烦,android,Android,我想知道,为什么谷歌让从一个活动传递到另一个活动的对象列表变得如此困难,即使我的活动都在一个过程中 为什么他们就不能有这样的东西 intent.putExtra("histories", listOfHistoryObjects); 它们是否过度设计了?我认为您只需要在类中实现可序列化的接口 然后你可以直接写: intent.putExtra("histories", listOfHistoryObjects); 查看此项了解详细说明。只要您停留在单个进程中,就可以使用标准java

我想知道,为什么谷歌让从一个活动传递到另一个活动的对象列表变得如此困难,即使我的活动都在一个过程中

为什么他们就不能有这样的东西

intent.putExtra("histories", listOfHistoryObjects);

它们是否过度设计了?

我认为您只需要在类中实现可序列化的接口

然后你可以直接写:

intent.putExtra("histories", listOfHistoryObjects);

查看此项了解详细说明。

只要您停留在单个进程中,就可以使用标准java技术通过引用传递对象。不需要意图,单例容器在android中也很好

一个原因:

  • 活动A启动活动B,将其作为指向对象的直接指针的参数进行处理
  • 用户按下home键
  • 您的进程在后台被终止
  • 用户将返回到您的应用程序
  • 活动B现在被重新创建
  • oops,它应该运行的对象参数不再存在
  • 另一个原因:

    活动是表示应用程序主要部分的顶级组件。平台跨流程为您管理它们;无论活动A和B是否在同一进程中运行,您提供给startActivity()的所有内容都必须通过IPC传递给系统进程,系统进程将维护该活动的状态,并在需要创建活动B时将其交还给您的进程。它还可以在流程的重新启动过程中维护这一点。如果它允许任何不能跨IPC边界传输的任意Java对象,那么它就不能执行任何操作

    如果您的UI元素是紧密耦合的,那么可以使用来实现UI的各个部分。此类不是应用程序的顶级部分,也不提供跨流程使用的任何支持,因此可以轻松地在片段或片段及其活动之间进行直接交互

    也就是说。。。在第一种情况下,这仍然不能消除您正确工作的需要。如果您不打算为片段使用基于捆绑包的参数(这允许系统自动在流程实例之间保存该数据),那么您需要注意实现并正确地重新创建处于适当状态的片段


    另外,请不要使用Serializable将对象存储到包裹或捆绑包中。正如at的文档所述,与实现Parcelable(甚至只是在捆绑包中使用内置原语)相比,这些方法效率极低。

    +1用于您的要点列表,但在某些情况下,我不同意序列化对象。基本上可以归结为每个案例。在某些情况下,效率低下的程度可以忽略不计,简单地忽略这种方法是不合理的。将内容打包可能会更有效率。