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,所以不会被垃圾回收。所以,单例对象在运行时不会被回收.