Android 编程中,使用静态变量有哪些缺点?应该如何规范使用?



Android 系统开发,看过 Android 一些经典的应用,代码里面 static 类型的变量并不是经常使用,但在开发中 static 确实非常好用,跨 activity 没问题,跨进程应该都可以吧。这个 static 有什么缺点和优点,我们到底应该如何的规范使用呢?(补充下,主要想问的是:有什么理由使我们在一些情况下不推荐用static变量?比如,service和activity通信,直接用static变量传递信息,这样看似不是很规范。)


1、在Android中不应该使用static变量,static本身依赖进程模型,而Android力图屏蔽进程的细节。
毫无疑问,Application类是你需要的选择,那是堆积一些进程级别全局信息的最佳场所;


2、由于 Android 具有相应的生命周期的特征,因此Android 程序不应该使用任何 static 变量,不应该并不是说不能,而是说使用static 变量很可能会导致bug。
有多种方式可以代替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或包内可访问权限。如果在其它类中被任意修改,程序肯定会乱。觉得不符合设计原则。

5、关于Android 使用静态变量,我遇到过的情况是:当应用不处于与当前用户交互的情况时(例如回到HOME,跳到其他应用),离开的时间比较长时,应用的静态变量有可能被置null, 是不保险的。

6、我的意见是尽量不要使用静态变量,值类型的静态常量除外(final static).
静态变量在安卓上不比其他Java环境,不管变量本身写在哪个类里,它一旦被代表组件的类初始化,比如被一个Activity初始化,它就会绑定在这个Activity类中..关键的地方来了,其他Java环境这个类一旦被加载,就可以存活到进程结束,因此给我们造成一种错觉就是,静态变量伴随整个进程....而Android的类却可能随着组件的销毁而卸载...这意味着你关闭一个Activity的时候,由这个Activity初始化的静态变量也会被制空,因此它的生命周期是不稳定的
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值