Android 开发中Static的使用

前言

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,或者使用一个静态类来保static变量,以及保存数据到静态文件等等。
  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初始化的静态变量也会被置空,因此它的生命周期是不稳定的。

附录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值