android静态变量的生命周期

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