在Android 开发过程中想必有很多人喜欢使用 static 静态变量,当然我也喜欢。但是往往会出现一些意想不到的Bug。
对于静态变量 在不同 进程之间是不可以共享的。经查证,同事在配置Service中 增加了 android:process=":remote" 也就是说 当启动我这个Service时候 会重新创建一个进程。所以当Activity和Service不在同一个进程中静态变量也就无法共享。所以出现这次的Bug。
在Android开发中不提倡过多使用static类型的变量(除了 static final)因为静态变量生命周期较长,而且不易被系统回收,因此如果不能合理地使用静态变量,就会适得其反,造成大量的内存浪费,所谓过犹不及。因此,建议在具备下列全部条件的情况下,尽量使用静态变量:
(1)变量所包含的对象体积较大,占用内存较多。
(2)变量所包含的对象生命周期较长。
(3)变量所包含的对象数据稳定。
(4)该类的对象实例有对该变量所包含的对象的共享需求。
如果变量不具备上述特点建议你不要轻易地使用静态变量,以免弄巧成拙。
对于全局变量使用Android提供了 Application 其生命周期与应用程序共存亡。所以对于全局变量可以写在 Application。
最近公司的一个项目由我和另一个同事共同负责,我这边负责一个Service,操作在一个Service中完成,开发结束本人测试也正常,但是整合到同事项目中却出现了静态变量获取不到值,一开始是怀疑同事那边静态变量赋值出现问题,经查证同事的Activity中对静态变量赋值完全没问题,这就让我纠结了 为什么他的Activity中静态变量正确赋值却在我的Service中获取不到呢?后来上网搜索了原因,各种解释如下:
经测试确实有这样的现象,但是我的Activity并没有 exit或者finish。继续寻找原因...
(e.g.2) static变量如果是不同进程的话也是在service里获取不到的吧对于静态变量 在不同 进程之间是不可以共享的。经查证,同事在配置Service中 增加了 android:process=":remote" 也就是说 当启动我这个Service时候 会重新创建一个进程。所以当Activity和Service不在同一个进程中静态变量也就无法共享。所以出现这次的Bug。
在Android开发中不提倡过多使用static类型的变量(除了 static final)因为静态变量生命周期较长,而且不易被系统回收,因此如果不能合理地使用静态变量,就会适得其反,造成大量的内存浪费,所谓过犹不及。因此,建议在具备下列全部条件的情况下,尽量使用静态变量:
(1)变量所包含的对象体积较大,占用内存较多。
(2)变量所包含的对象生命周期较长。
(3)变量所包含的对象数据稳定。
(4)该类的对象实例有对该变量所包含的对象的共享需求。
如果变量不具备上述特点建议你不要轻易地使用静态变量,以免弄巧成拙。
对于全局变量使用Android提供了 Application 其生命周期与应用程序共存亡。所以对于全局变量可以写在 Application。