我有一个活动,它是整个应用程序中使用的主要活动,它有许多变量。我有另外两个活动,我希望能够使用来自第一个活动的数据。
现在我知道我可以这样做:
GlobalState gs = (GlobalState) getApplication();
String s = gs.getTestMe();
然而,我想要分享很多变量,其中一些可能相当大,所以我不想像上面那样创建它们的副本。
是否有一种方法可以直接获取和更改变量而不使用get和set方法?我记得在谷歌开发网站上读过一篇文章,说不建议在Android上使用这种性能。
“然而,我想分享很多
变量,有些可能是
很大,所以我不想创造
像上面这样的副本。”
这并不会产生复制(特别是对于String,但即使对象也是通过引用的值传递的,而不是对象本身,像这样的getter是可以使用的——可以说比其他方法更好使用,因为它们是常见的和易于理解的)。旧的“性能神话”,比如不使用getter和setter,仍然有一些价值,但也在文档中更新了。
但如果你不想那样做,你也可以让变量在GlobalState中为public或protected,然后直接访问它们。并且,你可以创建一个静态单例,就像Application对象JavaDoc指出的那样:
通常不需要子类化
应用程序。在大多数情况下,
静态单例也可以提供同样的功能
以更模块化的方式实现功能。
如果你的单例需要全局
上下文(例如注册
广播接收机),功能到
检索时可以给它一个Context
内部使用
Context.getApplicationContext()时
首先构造单例。
使用Intent数据是传递数据的另一种方式,但它通常用于较小的数据和简单类型。您可以传递更大/更复杂的数据,但这比使用静态单leon更复杂。不过,Application对象仍然是我个人最喜欢的在Android应用程序组件之间共享更大/更复杂的非持久性数据的对象(因为它在Android应用程序中有一个定义良好的生命周期)。
另外,正如其他人所注意到的,如果数据变得非常复杂并且需要持久化,那么您也可以使用SQLite或文件系统。