我有一个问题一直困扰着我一段时间。我想知道将数据从一项活动获取到另一项活动的规范或最佳实践方法是什么。我个人知道有两种方法可以做到这一点。第一种方法是通过 putExtra() 函数(或类似的东西)将数据直接捆绑到 Intent 中。但是,这种方式在我看来有点违反封装原则。我这样做的第二种方法是将数据放入单独的类中,并在两个活动之间共享该类。这似乎从根本上更合理,但我仍然不确定。有人愿意对此有所了解吗?
3 回答
我在编写我的应用程序时遇到了同样的问题,我最终创建了扩展 Application 类的 CustomApplication 类并将其添加到我的 AndroidManifest.xml 中的标记中。通过这种方式,我可以使用适当的 getter 和 setter 在其中存储任何类型的数据。调用 (CustomApplication).getApplicationContext() 将返回 CustomApplication 对象,该对象对于您的整个应用程序是唯一的,并且存在于单个实例(单例)中,您可以使用它来设置和获取必要的值。
好处是只要您的应用程序(活动、服务等)的任何部分正在运行,您的应用程序对象和其中的数据就存在。
有多种方法可以在Activities
.
如果数据是预定义的数据类型,如
int
,double
,string
...直接放到Intent
.如果数据是二进制格式或类对象,则将类实现为
Parcelable
接口,并放入Intent
发送。如果数据很轻或很小,你做上面的1、2;但是,如果它足以影响性能或质量,那么我认为您需要一个数据存储。就像将数据保存在某个位置:例如文件、xml、数据库……并从中读取/写入。
尽管您可以将任何类实现到Parcelable
接口中以跨活动传递它们,但是这种方式会生成对象的新副本并违反一致性。
Android 是使用模型-视图-控制器 (MVC) 设计的。活动是控制器,我认为它们不应该自己保存数据,也不应该直接传递数据。一个 Activity 告诉下一个 Activity 数据在哪里,而下一个 Activity 从模型本身获取数据会是一个更好的做法。
也许你可以使用Provider
. Activity A将数据的uri放入intent并发送intent启动Activity B,然后Activity B从intent中获取数据的uri并使用它来实现来自Provider的数据