我有一个问题一直困扰着我,想知道在从一个活动获取数据到另一个活动方面,什么是被认为是规范的或者最佳实践的方法。我个人知道两种方式来做这件事情。第一种方式是通过putExtra()函数(或类似的函数)将数据直接打包到意图中。然而,我觉得这种方式有点违反封装原则。第二种方式是将数据放到一个独立的类中,在两个活动之间共享这个类。这似乎更有根据性,但我仍然不确定。是否有人能够给些建议?
我有一个问题一直困扰着我,想知道在从一个活动获取数据到另一个活动方面,什么是被认为是规范的或者最佳实践的方法。我个人知道两种方式来做这件事情。第一种方式是通过putExtra()函数(或类似的函数)将数据直接打包到意图中。然而,我觉得这种方式有点违反封装原则。第二种方式是将数据放到一个独立的类中,在两个活动之间共享这个类。这似乎更有根据性,但我仍然不确定。是否有人能够给些建议?
在编写我的应用程序时,我曾经有过同样的问题,并最终创建了一个扩展Application类的CustomApplication类,并将其添加到我的AndroidManifest.xml文件中的<application>标签中。这样我就可以使用适当的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放入意图中并发送意图以启动Activity B,然后Activity B从意图中获取数据的URI并使用它从提供程序中获取数据。