Android中的静态变量

项目中遇到的问题

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

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


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

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

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

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



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

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


静态变量的安全问题

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

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


静态变量的独立性

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

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


关于静态变量的销毁

如果静态变量没被销毁,也没被置null,这种情况下是不会被GC回收的。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值