静态变量 有可能被回收?
我在Application
中会对 一个静态变量USER
进行初始化,只有这个变量不为null
才会进入到界面A
,可是在实际某些情况下,界面A
中调用这个静态USER
的时候,会发生这个 USER
为null
的情况?
如果按照我的理解,因为app
被系统杀了,那再次打开就不应该是处于界面A
了啊,应该会再走Application#onCreate()
,这时我的静态变量USER
应该同样会被赋值,即使没有,那么也会因为没有赋值不能进入界面A
了。
我的理解有误吗?
不好意思上面的描述有点混乱,我尝试一下能不能描述的清晰一点
- 我在
Application
中存放了一个静态变量,用作记录用户对象User
- 如果这个
User
不为null
那么则可以进入HomeActivity
, - 如果为
null
那么就会进入LoginActivity
从而创建一个User
对象赋值给静态变量
所以如果用户处于HomeActivity
中,这个User
对象必然是不为null
的。但是在这个Activity
中发生了User
对象空指针的问题,导致应用崩溃(从bug反馈中查看到崩溃日志,测试中无法重现)所以我想请问一下,静态变量会被系统回收吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
垃圾回收的关键在于“垃圾”,也就是没用的变量。静态变量如果没用了,回收也不会有问题。
但是你遇到的问题是,你用了(取值),但得到的是 null,所以这肯定不是 GC 干的坏事,应该是程序里的某处逻辑把它置 null 了,只是你没发现(或者说没预料到)。
现在问题在于,你的描述并没把逻辑描述清楚,所以仍然分析不出来到底发生了什么事情……
之前也遇到过这种情况,你试一下下面的操作:
正常情况下调到A页面
将应用退到后台
执行命令
adb kill {pid}
再打开应用