前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 慎用static静态变量

Android 慎用static静态变量

作者头像
码客说
发布2019-10-22 14:41:47
2.5K0
发布2019-10-22 14:41:47
举报
文章被收录于专栏:码客码客

前言

Android是用Java开发,其静态变量的生命周期遵守Java的设计。 我们知道静态变量是在类被load的时候分配内存的,并且存在于方法区。 当类被卸载的时候,静态变量被销毁。 在PC机的客户端程序中,一个类被加载和卸载,可简单的等同于jvm进程的启动和结束。 那么在Android中呢? 用的Dalvik vm也是一样的。 不过Android不太突出的进程概念,所以对静态变量的生命周期就会感觉模糊,这种模糊对于值类型是无所谓的,如果是静态的对象引用,则与内存回收、内存泄漏这些问题有关,有必要加深研究和理解。

一、静态变量在类被加载的时候分配内存。

类在什么时候被加载? 当我们启动一个app的时候,系统会创建一个进程,此进程会加载一个Dalvik VM的实例,然后代码就运行在DVM之上,类的加载和卸载,垃圾回收等事情都由DVM负责。 也就是说在进程启动的时候,类被加载,静态变量被分配内存。

二、静态变量在类被卸载的时候销毁。

在Android中,静态变量在安卓上不比其他Java环境,不管变量本身写在哪个类里,它一旦被代表组件的类初始化,比如被一个Activity初始化,它就会绑定在这个Activity类中.. 关键的地方来了,其他Java环境 这个类一旦被加载,就可以存活到进程结束,因此给我们造成一种错觉就是,静态变量伴随整个进程…. 而Android的类却可能随着组件的销毁而卸载 这意味着你关闭一个Activity的时候,由这个Activity初始化的静态变量也会被置空,因此它的生命周期是不稳定的。 也就是说,在Android中静态变量可能随时被系统置空,变为null,其它地方在使用的时候就会产生空指针现象。

三、Android中的进程什么时候结束

这个是Android对进程和内存管理不同于PC的核心——如果资源足够,Android不会杀掉任何进程,另一个意思就是进程随时可能会被杀掉。 而Android会在资源够的时候,重启被杀掉的进程。 也就是说静态变量的值,如果不做处理,是不可靠的,可以说内存中的一切都不可靠。 如果要可靠,还是得保存到文件中去,在重启的时候恢复回来。 另一种情况就是不能把退出所有Activity等同于进程的退出,所以在用户点击图标启动应用的时候,以前存放于静态变量中的值,有可能还存在,因此要视具体情况给予清空操作。

四、Application也是一样不可靠

Application其实是一个单例对象,也是放在内存中的,当进程被杀掉,就全清空了,只不过Android系统会帮重建Application,而我们存放在Application的数据自然就没有了,还是得自己处理。

不过我们可以在Application被销毁时直接退出程序 其实 Application都被销毁了 程序就应该退出的

文章转载自http://blog.csdn.net/ctcwri/article/details/8858414

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 一、静态变量在类被加载的时候分配内存。
      • 二、静态变量在类被卸载的时候销毁。
        • 三、Android中的进程什么时候结束
          • 四、Application也是一样不可靠
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档