Android中的静态变量
2017-01-04 23:35
218 查看
项目中遇到的问题
今天在项目中,用不同账号登录时发现上一个账号的数据还在,最后检查出静态变量的事。这就涉及到静态变量的生命周期了。
静态变量是在类加载时被分配内存的。在类被卸载时,静态变量销毁。还是 复习一下java中静态变量与非静态变量吧!
java中静态变量与非静态变量
java中静态变量可以被类直接引用,而非静态变量不可以。非静态变量,需要实例化后才分配空间,静态变量在加载类的字节码后就给分配了空间,无需实例化。
静态变量存放于方法区,被类的所有实例共享。可通过类名.静态变量名访问,只分配一次空间。共享。
非静态变量,每创建一个实例,就会分配一次内存,彼此会不影响。
静态变量被分配内存的时机
在android中,当启动一个app时,系统会创建一个进程,此进程会加载一个 Dalvik 虚拟机的实例,代码运行在DVM之上。类的加载,分配空间,垃圾回收由DVM负责。也即启动app时,类被加载,静态变量被分配内存空间。
静态变量的安全问题
所谓安全性,是讨论静态变量是否安全可靠。
类在被进程结束的时候被卸载。android在资源不足的时候会杀掉一些进程,在资源足够时重启被杀掉的进程。你可能会看到一些app突然重启了,就有可能是内存不足造成的杀死后重启。这就造成了android中的静态变量不是那么可靠,上次保存的静态数据可能就没了。所以,针对静态变量,保险起见,缓存到文件里一份,当静态变量取不到数据时,就从文件里读取,这可以避免一些因内存不足,静态变量无数据造成的各种各样的后果。
静态变量的独立性
所谓独立性,这里特指不同场景取不同的值,不互相影响。
关于静态变量,另一个要说的就是,当应用退出账号时,上次保存的数据还在,因为在进程被关掉时才被销毁。这就需要手动重置那些与账户有关的静态数据,以免影响到另一个账户。
关于静态变量的销毁
如果静态变量没被销毁,也没被置null,这种情况下是不会被GC回收的。
今天在项目中,用不同账号登录时发现上一个账号的数据还在,最后检查出静态变量的事。这就涉及到静态变量的生命周期了。
静态变量是在类加载时被分配内存的。在类被卸载时,静态变量销毁。还是 复习一下java中静态变量与非静态变量吧!
java中静态变量与非静态变量
java中静态变量可以被类直接引用,而非静态变量不可以。非静态变量,需要实例化后才分配空间,静态变量在加载类的字节码后就给分配了空间,无需实例化。
静态变量存放于方法区,被类的所有实例共享。可通过类名.静态变量名访问,只分配一次空间。共享。
非静态变量,每创建一个实例,就会分配一次内存,彼此会不影响。
静态变量被分配内存的时机
在android中,当启动一个app时,系统会创建一个进程,此进程会加载一个 Dalvik 虚拟机的实例,代码运行在DVM之上。类的加载,分配空间,垃圾回收由DVM负责。也即启动app时,类被加载,静态变量被分配内存空间。
静态变量的安全问题
所谓安全性,是讨论静态变量是否安全可靠。
类在被进程结束的时候被卸载。android在资源不足的时候会杀掉一些进程,在资源足够时重启被杀掉的进程。你可能会看到一些app突然重启了,就有可能是内存不足造成的杀死后重启。这就造成了android中的静态变量不是那么可靠,上次保存的静态数据可能就没了。所以,针对静态变量,保险起见,缓存到文件里一份,当静态变量取不到数据时,就从文件里读取,这可以避免一些因内存不足,静态变量无数据造成的各种各样的后果。
静态变量的独立性
所谓独立性,这里特指不同场景取不同的值,不互相影响。
关于静态变量,另一个要说的就是,当应用退出账号时,上次保存的数据还在,因为在进程被关掉时才被销毁。这就需要手动重置那些与账户有关的静态数据,以免影响到另一个账户。
关于静态变量的销毁
如果静态变量没被销毁,也没被置null,这种情况下是不会被GC回收的。
相关文章推荐
- Android内存泄漏之静态类和静态变量
- Android学习备忘010——使用静态变量在Activity之间传递数据
- Android静态变量的生命周期
- Android静态变量的生命周期
- Android静态变量的生命周期 简单介绍
- Android 静态变量不可信
- Android静态变量的生命周期
- Android静态变量的生命周期
- android程序退出后静态变量的处理
- Android入门篇三:使用静态变量在Activity之间传递数据
- Android 中静态变量的生命周期
- Android静态变量的生命周期
- Android静态变量的生命周期 简单介绍
- Android静态变量的生命周期 简单介绍
- Android入门篇三:使用静态变量在Activity之间传递数据
- android之 在Activity之间使用意图传递数据(使用静态变量传递数据)
- Android--慎用static静态变量
- Android中静态变量的生命周期
- 关于androidManifest中指定不同的进程,application中静态变量值问题
- android 使用静态变量传递数据