【Android】设置全局变量的两种方法
阅读数:
说到全局变量,可能在教科书里面都不建议我们使用,但是在实际开发过程中,会发现全局变量其实带来了很大的便捷性。虽然Android在不同的Activity切换时可以把要传递的值传到Intent里面(iOS中也有类似的方法),但是当我们应用的页面很多,逻辑渐渐复杂了之后,全局变量就带来了非常大的便利。
我个人总结了之后,把全局变量分成了两大类:
程序生命周期之外的全局变量
这种全局变量当程序被kill了之后,依旧可以保存下来,当程序下次启动的时候,依然有效。最常见的就是用户名、密码之类的了。当然,如果你要保存的数据非常多,而且数据量比较大,就需要用轻量级的数据库来保存了。
生命周期之内的全局变量
顾名思义,当程序被kill之后,下次启动了之后,这些变量就被重新初始化,这些变量只在此次生命周期之内有效。最常见的就是页面之间要传递的参数了,这些参数并不需要在程序被强制结束之后依旧保存。
我们就分类来看吧!
生命周期之外的全局变量
一般来说,这类全局变量不会很多,如果很多的话,就要使用sqlite等数据库了,所以,我的这些全局变量是放在你自己定义的一个公共方法类(我的命名为CommonUtil
)里面的,这个类一般都是自定义的,不继承自任何类。在这个类里面,我们定义下面的成对的方法来设置和获取全局变量。
1 | /** |
注:
- 必须通过
Context
提供的getSharedPreferences(String, int)
来获得实例。该方法的第一个参数是指定XML文件名(不包含“.xml”后缀)的字符串,方法会去读取出对应的文件,创建一个SharedPreferences对象。第二个参数指定文件的访问权限,共有4中可选模式,从API 17开始基于安全的考虑,MODE_WORLD_READABLE
和MODE_WORLD_WRITEABLE
已经被废弃使用,只有MODE_PRIVATE
和MODE_MULTI_PROCESS
可使用,一般情况下指定MODE_PRIVATE
即可。 - 这里的
Context
我一般是建议选择整个Application
的context,而不是某一个Activity
的context,因为整个application的context生命周期在大多数情况下要长于特定的activity的context。至于如何获取,很简单一个函数getApplicationContext()
- 我这里的context其实是我自定义的类中的一个static成员变量,在程序初次加载的时候,就把application的context赋予它,我们也可以在函数的形参中赋值进去。
SharedPreferences
所能存储的类型被限定在了String
、int
、long
、float
、boolean
这些基础数据类中,唯一的集合类型也只是Set<String>
,而它看起来更像是用来作为不能有重复数据的数组。
生命周期内的全局变量
在上一篇Blog中也有用到这里的内容,一般来说,生命周期内的全局变量可以有很多,不同页面之间传递或者有交叉使用的变量都可以放进来,所以我们通常也另外写一个单独的类,只不过和第一种不一样,这个类需要继承自Application
类
1 |
|
只要用到的,我们都可以继续在这个类里面继续补充。
当然,我们的AndroidManifest
文件中也要做相应的修改。
1 | <application |
添加android:name=".Utils.CommonVariables"
属性