原文链接:
http://www.cnblogs.com/Joanna-Yan/
静态变量引用与内存回收、内存泄露这些问题有关,有必要加深研究和理解。
一、静态变量在类被加载的时候分配内存。
类在什么时候被加载?当我们启动一个app的时候,系统会创建一个进程,此进程会加载一个DVM实例,然后代码就运行在DVM之上,类的加载和卸载、垃圾回收等事情都由DVM负责。也就是说进程启动的时候,类被加载,静态变量被分配内存。
二、静态变量在类被卸载的时候销毁。
类在什么时候被卸载?答:在进程结束的时候。说明:一般情况下,所有的类都是默认的ClassLoader加载的,只要ClassLoader存在,类就不会被卸载,而默认的ClassLoader生命周期是与进程一致的,这里讨论一般情况。
三、Android的进程什么时候结束
- Android 会在资源不足的情况下,随时杀掉进程,而且会Android会在资源足够的时候,重启被杀掉的进程。
- 不能把退出所有Activity等同于进程的退出,所以在用户点击图标启动应用的时候,以前存放于静态变量中的值,有可能还存在,因此要视具体情况给予清空操作。
四、Application也是一样不可靠
Application其实是一个单例对象,也是放在内存中的,当进程被杀掉,就全清空了,只不过Android系统会帮重建Application,而我们存放在Application的数据自然就没有了,还是得自己处理。