Android 系统开发,看过 Android 一些经典的应用,代码里面 static 类型的变量并不是经常使用,但在开发中 static 确实非常好用,跨 activity 没问题,跨进程应该都可以吧。这个 static 有什么缺点和优点,我们到底应该如何的规范使用呢?(补充下,主要想问的是:有什么理由使我们在一些情况下不推荐用static变量?比如,service和activity通信,直接用static变量传递信息,这样看似不是很规范。)
1、
在Android中不应该使用static变量,static本身依赖进程模型,而Android力图屏蔽进程的细节。
毫无疑问,Application类是你需要的选择,那是堆积一些进程级别全局信息的最佳场所;
毫无疑问,Application类是你需要的选择,那是堆积一些进程级别全局信息的最佳场所;
2、
由于 Android 具有相应的生命周期的特征,因此Android 程序不应该使用任何 static 变量,不应该并不是说不能,而是说使用static 变量很可能会导致bug。
有多种方式可以代替static 变量,比如继承 Application 类,使用 preference ,使用 db,以及保存数据到静态文件 等等。
有多种方式可以代替static 变量,比如继承 Application 类,使用 preference ,使用 db,以及保存数据到静态文件 等等。
3、Android 里面的常量一般来说是继承Application来定义.在使用时,getApplication()来拿到。
4、我好像使用static比较多的只有两个地方,一个是用static final定义常量,一个是单例模式时。
static访问是无法跨进程的。Android中的Activity,Service是可以在各自进程中运行的,用static传递参数到不同进程的Activity、Service时会错。
Android Bundle是可以跨进程传递数据的。觉得还是使用Intent传递数据为好。
Android中一个比较好的设计是,尽量让上层不关注进程之类的东西,Activity,Service,Provider都是一个个组件。Activity、Service中使用Bundle传递机制接收参数,让其可以提供服务给手机里所有程序。
用static传递参数时,static定义的变量必然会设置为public或包内可访问权限。如果在其它类中被任意修改,程序肯定会乱。觉得不符合设计原则。
static访问是无法跨进程的。Android中的Activity,Service是可以在各自进程中运行的,用static传递参数到不同进程的Activity、Service时会错。
Android Bundle是可以跨进程传递数据的。觉得还是使用Intent传递数据为好。
Android中一个比较好的设计是,尽量让上层不关注进程之类的东西,Activity,Service,Provider都是一个个组件。Activity、Service中使用Bundle传递机制接收参数,让其可以提供服务给手机里所有程序。
用static传递参数时,static定义的变量必然会设置为public或包内可访问权限。如果在其它类中被任意修改,程序肯定会乱。觉得不符合设计原则。
5、关于Android 使用静态变量,我遇到过的情况是:当应用不处于与当前用户交互的情况时(例如回到HOME,跳到其他应用),离开的时间比较长时,应用的静态变量有可能被置null, 是不保险的。
7、我的意见是尽量不要使用静态变量,值类型的静态常量除外(final static).
静态变量在安卓上不比其他Java环境,不管变量本身写在哪个类里,它一旦被代表组件的类初始化,比如被一个Activity初始化,它就会绑定在这个Activity类中..关键的地方来了,其他Java环境这个类一旦被加载,就可以存活到进程结束,因此给我们造成一种错觉就是,静态变量伴随整个进程....而Android的类却可能随着组件的销毁而卸载...这意味着你关闭一个Activity的时候,由这个Activity初始化的静态变量也会被制空,因此它的生命周期是不稳定的
静态变量在安卓上不比其他Java环境,不管变量本身写在哪个类里,它一旦被代表组件的类初始化,比如被一个Activity初始化,它就会绑定在这个Activity类中..关键的地方来了,其他Java环境这个类一旦被加载,就可以存活到进程结束,因此给我们造成一种错觉就是,静态变量伴随整个进程....而Android的类却可能随着组件的销毁而卸载...这意味着你关闭一个Activity的时候,由这个Activity初始化的静态变量也会被制空,因此它的生命周期是不稳定的