gpt4 book ai didi

android - 为什么将对象列表从一个 Activity 传递到另一个 Activity 如此麻烦

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:55:01 25 4
gpt4 key购买 nike

我想知道,即使我的所有 Activity 都在一个进程中,为什么 Google 让将对象列表从一个 Activity 传递到另一个 Activity 如此困难

为什么他们不能有类似的东西

intent.putExtra("histories", listOfHistoryObjects);

它们是否过度设计?

最佳答案

一个原因:

  1. Activity A 启动 Activity B,处理一个直接指向对象的参数。
  2. 用户按下主页。
  3. 您的进程在后台被终止。
  4. 用户返回您的应用。
  5. Activity B 现在已重新创建。
  6. 糟糕,它应该运行的对象参数不再存在。

另一个原因:

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

如果您的 UI 元素紧密耦合,您可以使用 Fragment实现 UI 的各个部分。此类不是应用程序的顶级部分,不提供任何跨进程使用支持,因此可以轻松地在 fragment 之间或 fragment 与其 Activity 之间进行直接交互。

也就是说……这仍然不能消除您在第一种情况下正确工作的需要。如果您不打算对 fragment 使用基于 Bundle 的参数(这允许系统自动处理跨流程实例保存该数据),您将需要注意实现 onSaveInstanceState等等,以正确地重新创建处于适当状态的 fragment 。

另外,请不要使用 Serializable 将对象存储到 Parcel 或 Bundle 中。作为 http://developer.android.com/reference/android/os/Parcel.html#writeSerializable(java.io.Serializable) 处的文档说,与实现 Parcelable(或者甚至只是使用 Bundle 中的内置原语)相比,这些效率非常低。

关于android - 为什么将对象列表从一个 Activity 传递到另一个 Activity 如此麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9733266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com