在不同的Android活动之间交换数据或对象的正确方法是什么?
欢迎屏幕< - >主屏幕< - >启动例程< - >处理数据< - >设置
在Android应用中有多个活动是正常/建议的吗?在我看来,在应用程序中使用这种数据交换模型有点奇怪
答案 0 :(得分:9)
是否正常/建议有更多 Android应用中的一项活动?
正常?是。推荐的?这取决于应用程序。
在我看来,这有点奇怪 有这种数据交换模型 内部申请
你如何处理网络应用?好吧,你将你的模型放在一个中心位置(服务器),你在主要的UI(页面)单元之间的链接中传递一小部分上下文数据(URL参数)。
您如何处理桌面应用?好吧,你将模型放在一个中心位置(数据库),然后在主要UI(窗口)单元之间的链接中传递一小部分上下文数据(例如,构造函数参数)。
你如何处理Android应用?好吧,你将模型放在一个中心位置(数据库,ContentProvider
等),并在主要UI(活动)单元之间的链接中传递一小部分上下文数据(Intent
附加内容。)< / p>
答案 1 :(得分:6)
Android开发者页面上有一个概述:
http://developer.android.com/guide/appendix/faq/framework.html#3
总结一下,它取决于您要传递的数据类型。但一般来说,如果可能的话,我会选择Intents,因为它们很快并且为此而构建。
Here是一个示例,解释了如何使用Intents在活动之间传递数据。
答案 2 :(得分:4)
答案是:它取决于。
根据应用程序的体系结构,您可能希望:
将您的数据存储在自定义ContentProvider中,并传递URI引用 - 如果您的应用程序基于数据库,这是可行的方法,因为它允许其他应用程序直接引用您的数据项;
让您的活动通过发送彼此的Intent进行通信,并将数据打包在自定义Intent数据字段中 - 如果您只使用非常小的数据项,例如名称或URI,这很简单管理事物的方式,但对于较大的项目,它会分解;
让您的所有活动在单个进程中运行,并将数据存储在共享Java对象中 - 通常不推荐,但适用于游戏等专门应用程序(但请记住与应用程序生命周期有关的问题) !)。
我的应用程序倾向于使用前两者的组合:数据主要存在于ContentProvider中,但我也使用Intent在ContentProvider和活动之间发送带外信息,此类数据不容易适合在ContentProvider API中。
答案 3 :(得分:0)
执行谷歌命令您在此处执行的操作:http://developer.android.com/resources/faq/framework.html#3
选项: 原始数据类型 非持久对象 单身人士课 - 我的最爱:D 公共静态字段/方法 WeakReferences对象的HashMap 持久对象(应用程序首选项,文件,contentProviders,SQLite DB)