Android是用Java开发,其静态变量的生命周期遵守Java的设计。我们知道静态变量是在类被load的时候分配内存的,并且存在于方法区。当类 被卸载的时候,静态变量被销毁。在PC机的客户端程序中,一个类被加载和卸载,可简单的等同于jvm进程的启动和结束。那么在Android中呢?用的 Dalvik vm也是一样的。不过Android不太突出的进程概念,所以对静态变量的生命周期就会感觉模糊,这种模糊对于值类型是无所谓的,如果是静态的对象引用, 则与内存回收、内存泄漏这些问题有关,有必要加深研究和理解。
一、静态变量在类被加载的时候分配内存。
类在什么时候被加载?
当我们启动一个app的时候,系统会创建一个进程,此进程会加载一个Dalvik VM的实例,然后代码就运行在DVM之上,类的加载和卸载,垃圾回收等事情都由DVM负责。也就是说在进程启动的时候,类被加载,静态变量被分配内存。
二、静态变量在类被卸载的时候销毁。
类在什么时候被卸载?
在进程结束的时候。
说明:一般情况下,所有的类都是默认的ClassLoader加载的,只要ClassLoader存在,类就不会被卸载,而默认的ClassLoader生命周期是与进程一致的,本文讨论一般情况。
三、Android中的进程什么时候结束
这个是Android对进程和内存管理不同于PC的核心——如果资源足够,Android不会杀掉任何进程,另一个意思就是进程随时可能会被杀掉。而 Android会在资源够的时候,重启被杀掉的进程。也就是说静态变量的值,如果不做处理,是不可靠的,可以说内存中的一切都不可靠。如果要可靠,还是得 保存到Nand或SD卡中去,在重启的时候恢复回来。
另一种情况就是不能把退出所有Activity等同于进程的退出,所以在用户点击图标启动应用的时候,以前存放于静态变量中的值,有可能还存在,因此要视具体情况给予清空操作。
四、Application也是一样不可靠
Application其实是一个单例对象,也是放在内存中的,当进程被杀掉,就全清空了,只不过Android系统会帮重建Application,而我们存放在Application的数据自然就没有了,还是得自己处理。
五、静态引用的对象不会被垃圾回收
只要静态变量没有被销毁也没有置null,其对象一直被保持引用,也即引用计数不可能是0,因此不会被垃圾回收。因此,单例对象在运行时不会被回收.

转载于:https://www.cnblogs.com/Free-Thinker/p/3398357.html

Android静态变量的生命周期相关推荐

  1. C/C++构造及析构顺序及变量的生命周期

    (1)变量的构造及析构顺序 1)在全局范围内定义的对象(即在所有函数之外定义的对象),它的构造函数在文件中的所有函数(包括main函数)执行之前调用.如果一个程序中有多个文件,而不同文件之间都定义了全 ...

  2. ARP协议详解之ARP动态与静态条目的生命周期

    ARP协议详解之ARP动态与静态条目的生命周期 ARP动态条目的生命周期 动态条目随时间推移自动添加和删除. q  每个动态ARP缓存条目默认的生命周期是两分钟.当超过两分钟,该条目会被删掉.所以,生 ...

  3. Delphi匿名方法(三):扩展本地变量的生命周期

    本地变量,一般是随着函数执行结束,就不能再访问: 而如果在匿名函数,访问了外部函数的本地变量,本地变量的生命周期会被扩展 unit Unit1;interfaceusesWinapi.Windows, ...

  4. JVM详解之:汇编角度理解本地变量的生命周期

    文章目录 简介 本地变量的生命周期 举例说明 优化的原因 总结 简介 java方法中定义的变量,它的生命周期是什么样的呢?是不是一定要等到方法结束,这个创建的对象才会被回收呢? 带着这个问题我们来看一 ...

  5. c++中的异常---2(异常接口声明,异常变量的生命周期,异常的多态使用)

    异常接口声明 为了加强程序的可读性,可以在函数声明中列出可能抛出异常的所有类型,例如:void func() throw(A,B,C);这个函数func能够且只能抛出类型A,B,C及其子类的异常 如果 ...

  6. android应用程序的生命周期,Android应用程序的生命周期.doc

    Android应用程序的生命周期.doc Android应用程序的生命周期 描述:程序的生命周期是在Android系统中进程从启动到终止的所有阶段,也就是Android从启动到停止的全过程.==程序的 ...

  7. Android生命周期帮助类,Android Service类与生命周期详细介绍_Android_脚本之家

    Android  Service类与生命周期 Service是Android四大组件与Activity最相似的组件,都代表可执行的程序,区别在于Service一直在后台运行且没有用户界面. 1.Ser ...

  8. android 英语论文,Android中Activity的生命周期英语论文+译文.doc

    Android中Activity的生命周期英语论文译文 北方民族大学 英文文献翻译 论文题目: Android环境及Activity介绍 院(部)名 称: 计算机科学与工程学院 学 生 姓 名: 陈 ...

  9. C++异常(异常的基本语法、栈解旋unwinding、异常接口声明、异常变量的生命周期、异常的多态使用、C++系统标准异常库)

    文章目录 1 异常的基本概念 1.1 C语言中的异常处理 1.2 C++中的异常处理 1.3 异常严格类型匹配 2 栈解旋(unwinding) 3 异常的接口声明[C++11已废弃] 4 异常变量的 ...

最新文章

  1. 苹果四大供应商向高通索赔90亿;金立否认裁定破产清算
  2. 打算尝试瑜伽,看是否能解决长期困扰的胃痛问题
  3. android面向数据库的的编程工具-OrmLite
  4. python flask服务_在python中Flask配置服务
  5. 基于Qt\C++实现的网络远程控制系统
  6. 东莞市初中生中考计算机内容,2019年广东东莞市中考考试科目及内容
  7. 01python入门一
  8. JSON格式数据与数据组件
  9. 宜创科技:低代码技术赋能企业数字化
  10. Windows之Xmanager连接linux打开Oracle视图操作
  11. Vant 1.0 发布:轻量、可靠的移动端 Vue 组件库
  12. ZMQ模式详解——发布/订阅模式
  13. 无线路由不能上网问题的解决的方法
  14. Go语言编程(七牛云存储团队执笔)
  15. 关于DOS/DDOS攻击和防御
  16. 微信个人号有哪些好玩的自动回复?自动回复话术分享
  17. 思科路由器交换机指示灯状态详解
  18. 06.输入系统:第10课第20节_输入系统_多点触摸_电容屏驱动程序
  19. eclipse java swt_Eclipse swt开发环境搭建
  20. 28BYJ-48 电机驱动(Linux)

热门文章

  1. Node的异步与java的异步_node中异步IO的理解
  2. 页面自动获取焦点影响页面切换效果_ReactIndex - 让文件夹index页面变得更有实用性 (替换传统Web服务器index页)...
  3. dedecms vdimgck.php,织梦dedecms后台验证码图片不显示解决方案
  4. java正则截取xml节点_实例讲述Java使用正则表达式截取重复出现的XML字符串功能...
  5. vue项目nginx部署子目录_vue 多项目部署---二级目录
  6. linux内核oom,linux OOM killer分析
  7. 【camera-radar】基于ROS的多传感器融合感知系统实现(雷达+相机)(2)
  8. 0.基于C++的图像处理算法实现、INTEL CPU上SSE加速、ARM CPU上NEON加速
  9. linux怎么开启samba服务,LINUX开启SAMBA服务
  10. python安装依赖失败_python - pip安装jq依赖关系失败 - SO中文参考 - www.soinside.com