您的位置:首页 > 移动开发 > Android开发

Android中的静态变量

2017-01-04 23:35 218 查看
项目中遇到的问题

今天在项目中,用不同账号登录时发现上一个账号的数据还在,最后检查出静态变量的事。这就涉及到静态变量的生命周期了。

静态变量是在类加载时被分配内存的。在类被卸载时,静态变量销毁。还是 复习一下java中静态变量与非静态变量吧!

java中静态变量与非静态变量

java中静态变量可以被类直接引用,而非静态变量不可以。非静态变量,需要实例化后才分配空间,静态变量在加载类的字节码后就给分配了空间,无需实例化。

静态变量存放于方法区,被类的所有实例共享。可通过类名.静态变量名访问,只分配一次空间。共享。

非静态变量,每创建一个实例,就会分配一次内存,彼此会不影响。

静态变量被分配内存的时机

在android中,当启动一个app时,系统会创建一个进程,此进程会加载一个 Dalvik 虚拟机的实例,代码运行在DVM之上。类的加载,分配空间,垃圾回收由DVM负责。也即启动app时,类被加载,静态变量被分配内存空间。

静态变量的安全问题

所谓安全性,是讨论静态变量是否安全可靠。

类在被进程结束的时候被卸载。android在资源不足的时候会杀掉一些进程,在资源足够时重启被杀掉的进程。你可能会看到一些app突然重启了,就有可能是内存不足造成的杀死后重启。这就造成了android中的静态变量不是那么可靠,上次保存的静态数据可能就没了。所以,针对静态变量,保险起见,缓存到文件里一份,当静态变量取不到数据时,就从文件里读取,这可以避免一些因内存不足,静态变量无数据造成的各种各样的后果。

静态变量的独立性

所谓独立性,这里特指不同场景取不同的值,不互相影响。

关于静态变量,另一个要说的就是,当应用退出账号时,上次保存的数据还在,因为在进程被关掉时才被销毁。这就需要手动重置那些与账户有关的静态数据,以免影响到另一个账户。

关于静态变量的销毁

如果静态变量没被销毁,也没被置null,这种情况下是不会被GC回收的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: