【问题标题】:How to exchange data (objects) between different Android Activities?如何在不同的 Android Activity 之间交换数据(对象)?
【发布时间】:2011-10-30 23:51:43
【问题描述】:

在不同的 Android Activity 之间交换数据或对象的正确方法是什么?

欢迎屏幕 主屏幕 启动例程 处理数据 设置

在 Android 应用中有多个活动是否正常/建议?在我看来,在应用程序内部有这种数据交换模型有点奇怪

【问题讨论】:

标签: android


【解决方案1】:

正常吗/建议多点 Android 应用中的活动不止一项?

正常吗?是的。推荐的?这取决于应用程序。

在我看来,这有点奇怪 有这种数据交换模型 内部应用

您使用 Web 应用程序做什么?好吧,您将模型保存在中心位置(服务器),并在 UI 的主要单元(页面)之间的链接中传递少量上下文数据(URL 参数)。

您如何处理桌面应用程序?好吧,您将模型保存在中心位置(数据库),并在 UI 的主要单元(窗口)之间的链接中传递少量上下文数据(例如构造函数参数)。

您如何处理 Android 应用程序?好吧,您将模型放在中心位置(数据库、ContentProvider 等),并在 UI 的主要单元(活动)之间的链接中传递少量上下文数据(Intent extras)。

【讨论】:

    【解决方案2】:

    Android 开发者页面上有一个概述:

    http://developer.android.com/guide/appendix/faq/framework.html#3

    总而言之,这取决于您要传递的数据类型。但总的来说,如果可能的话,我会选择 Intents,因为它们速度很快,而且专为此而设计。

    Here 是一个示例,它解释了如何使用 Intent 在 Activity 之间传递数据。

    【讨论】:

    • 仅将Intent extras 用于与您正在启动的内容相关的内容。将它们视为等同于在网站页面之间的链接中使用的 URL 上的参数。特别是,不要将模型数据存储在 Intent extras 中,因为当您将数据从活动传递到活动时,您最终会得到 N 个该数据的副本。此外,Intents 会在内存中停留相当长的一段时间,有时甚至在 Activity 被销毁之后,因此内存成本变得更高。
    【解决方案3】:

    答案是:视情况而定。

    根据您的应用程序架构,您可能希望:

    • 将您的数据存储在自定义 ContentProvider 中,并将 URI 引用传递给它 --- 如果您的应用程序是基于数据库的,那么这是可行的方法,因为它允许其他应用程序直接引用您的数据项;

    • 让您的活动通过相互发送 Intent 进行通信,并将数据打包在自定义 Intent 数据字段中 --- 如果您只使用非常小的数据项,例如名称或 URI,这很简单管理事物的方式,但它会因较大的项目而崩溃;

    • 让您的所有活动在单个进程中运行,并将您的数据存储在共享 Java 对象中 --- 通常不推荐,但适用于游戏等专业应用程序(但请记住与应用程序生命周期有关的问题!)。

    我的应用倾向于使用前两者的组合:数据主要存在于 ContentProvider 中,但我也使用 Intent 在 ContentProvider 和 Activity 之间发送带外信息,因为这些数据不容易容纳在 ContentProvider API 中。

    【讨论】:

      【解决方案4】:

      在此处执行 google 命令您执行的操作:http://developer.android.com/resources/faq/framework.html#3

      选择: 原始数据类型 非持久对象 单例类 - 我最喜欢的 :D 公共静态字段/方法 对象弱引用的 HashMap 持久对象(应用程序首选项、文件、contentProviders、SQLite DB)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-05
        • 2020-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多