【发布时间】:2011-10-30 23:51:43
【问题描述】:
在不同的 Android Activity 之间交换数据或对象的正确方法是什么?
欢迎屏幕 主屏幕 启动例程 处理数据 设置
在 Android 应用中有多个活动是否正常/建议?在我看来,在应用程序内部有这种数据交换模型有点奇怪
【问题讨论】:
标签: android
在不同的 Android Activity 之间交换数据或对象的正确方法是什么?
欢迎屏幕 主屏幕 启动例程 处理数据 设置
在 Android 应用中有多个活动是否正常/建议?在我看来,在应用程序内部有这种数据交换模型有点奇怪
【问题讨论】:
标签: android
正常吗/建议多点 Android 应用中的活动不止一项?
正常吗?是的。推荐的?这取决于应用程序。
在我看来,这有点奇怪 有这种数据交换模型 内部应用
您使用 Web 应用程序做什么?好吧,您将模型保存在中心位置(服务器),并在 UI 的主要单元(页面)之间的链接中传递少量上下文数据(URL 参数)。
您如何处理桌面应用程序?好吧,您将模型保存在中心位置(数据库),并在 UI 的主要单元(窗口)之间的链接中传递少量上下文数据(例如构造函数参数)。
您如何处理 Android 应用程序?好吧,您将模型放在中心位置(数据库、ContentProvider 等),并在 UI 的主要单元(活动)之间的链接中传递少量上下文数据(Intent extras)。
【讨论】:
Android 开发者页面上有一个概述:
http://developer.android.com/guide/appendix/faq/framework.html#3
总而言之,这取决于您要传递的数据类型。但总的来说,如果可能的话,我会选择 Intents,因为它们速度很快,而且专为此而设计。
Here 是一个示例,它解释了如何使用 Intent 在 Activity 之间传递数据。
【讨论】:
Intent extras 用于与您正在启动的内容相关的内容。将它们视为等同于在网站页面之间的链接中使用的 URL 上的参数。特别是,不要将模型数据存储在 Intent extras 中,因为当您将数据从活动传递到活动时,您最终会得到 N 个该数据的副本。此外,Intents 会在内存中停留相当长的一段时间,有时甚至在 Activity 被销毁之后,因此内存成本变得更高。
答案是:视情况而定。
根据您的应用程序架构,您可能希望:
将您的数据存储在自定义 ContentProvider 中,并将 URI 引用传递给它 --- 如果您的应用程序是基于数据库的,那么这是可行的方法,因为它允许其他应用程序直接引用您的数据项;
让您的活动通过相互发送 Intent 进行通信,并将数据打包在自定义 Intent 数据字段中 --- 如果您只使用非常小的数据项,例如名称或 URI,这很简单管理事物的方式,但它会因较大的项目而崩溃;
让您的所有活动在单个进程中运行,并将您的数据存储在共享 Java 对象中 --- 通常不推荐,但适用于游戏等专业应用程序(但请记住与应用程序生命周期有关的问题!)。
我的应用倾向于使用前两者的组合:数据主要存在于 ContentProvider 中,但我也使用 Intent 在 ContentProvider 和 Activity 之间发送带外信息,因为这些数据不容易容纳在 ContentProvider API 中。
【讨论】:
在此处执行 google 命令您执行的操作:http://developer.android.com/resources/faq/framework.html#3
选择: 原始数据类型 非持久对象 单例类 - 我最喜欢的 :D 公共静态字段/方法 对象弱引用的 HashMap 持久对象(应用程序首选项、文件、contentProviders、SQLite DB)
【讨论】: