全局变量被回收造成的空指针

Posted tangs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全局变量被回收造成的空指针相关的知识,希望对你有一定的参考价值。

1. 假设我们在Application类里面使用静态变量来保存数据,比如:

技术分享图片

然后在其他页面直接使用App.userInfoData来获取数据,在某些情况下就会出现空指针异常。

问题是如何发生的,会在什么情况下发生此类问题?

当用户运用手机清理助手或后台回收我们的应用造成我们应用程序进程被杀死的时候就有可能出现这种空指针的问题,下面举个例子我们一起来看看这种情况是如何发生的。

1.假设在Activity1里面里面使用了userInfoData对象,然后从activity1跳转到activity2,再使用下图的方法结束进程:

技术分享图片技术分享图片

 然后就空指针了:

技术分享图片

 原因分析:

当点击上面那个× 结束进程后,application是会重新走一遍生命周期的,然后重修走一遍onCreat()方法,注意此时的application对象地址是一样的。下图是别人博客的一段话:

 技术分享图片

 

可参考:

android-Application被回收引发空指针异常分析(消灭全局变量)

 

以上是关于全局变量被回收造成的空指针的主要内容,如果未能解决你的问题,请参考以下文章

为啥lua语言中使用全局变量就会造成内存泄漏

为啥lua语言中使用全局变量就会造成内存泄漏呢??

xamarin 全局变量怎么保证不被系统回收

25.函数例题-预解析 作用域 函数变量优先级全局变量污染(直接在全局声明 函数里的变量没声明)但是函数里的变量没声明造成的全局变量污染有个前提,函数要被调用)

关于JavaScript全局变量的问题(生存周期,是不是跨页面)

python中用于定义全局变量的空等效项[重复]