静态变量 有可能被回收?

发布于 2022-09-05 10:17:05 字数 940 浏览 15 评论 0

我在Application中会对 一个静态变量USER进行初始化,只有这个变量不为null才会进入到界面A,可是在实际某些情况下,界面A中调用这个静态USER的时候,会发生这个 USERnull的情况?

如果按照我的理解,因为app被系统杀了,那再次打开就不应该是处于界面A了啊,应该会再走Application#onCreate(),这时我的静态变量USER应该同样会被赋值,即使没有,那么也会因为没有赋值不能进入界面A了。

我的理解有误吗?


不好意思上面的描述有点混乱,我尝试一下能不能描述的清晰一点

  1. 我在Application中存放了一个静态变量,用作记录用户对象User
  2. 如果这个User 不为null那么则可以进入HomeActivity
  3. 如果为null那么就会进入LoginActivity从而创建一个User对象赋值给静态变量

所以如果用户处于HomeActivity中,这个User对象必然是不为null的。但是在这个Activity中发生了User对象空指针的问题,导致应用崩溃(从bug反馈中查看到崩溃日志,测试中无法重现)所以我想请问一下,静态变量会被系统回收吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

拥抱影子 2022-09-12 10:17:05

垃圾回收的关键在于“垃圾”,也就是没用的变量。静态变量如果没用了,回收也不会有问题。

但是你遇到的问题是,你用了(取值),但得到的是 null,所以这肯定不是 GC 干的坏事,应该是程序里的某处逻辑把它置 null 了,只是你没发现(或者说没预料到)。

现在问题在于,你的描述并没把逻辑描述清楚,所以仍然分析不出来到底发生了什么事情……

只等公子 2022-09-12 10:17:05

之前也遇到过这种情况,你试一下下面的操作:

  • 正常情况下调到A页面

  • 将应用退到后台

  • 执行命令 adb kill {pid}

  • 再打开应用

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文