首页 > 编程知识 正文

app空指针异常怎么解决,应用自身空指针异常

时间:2023-05-04 16:26:18 阅读:191237 作者:4774

APP长期在后台,有可能导致activity被内存回收,这时候再次点开APP的时候,由于activity里面的数据被清空,控件也变成了null,导致空指针出现


有2中解决思路:

1.先来说下第一种,是使用onSaveInstanceState和onRestoreInstanceState来保存UI状态的,基本上就是在按home键或者其他情况的时候存储数据,然后再次点开APP的时候读取bundle的数据,这种网上太多了,我就不说具体怎么做,这里只说我关于这种思路的看法。

   (1)这种保存数据的做法只能存储数据,解决像list空指针的问题,但是不能解决控件空指针的问题。

   (2)然后实际上一个项目那么多个页面,而且activity和fragment保存数据的方法还不一样,不可能一个一个页面去存储和读取数据的,不太现实。

   (3)网上说的baseactivity重写这2个方法,然后其他activity继承,也不过是存储了公共数据,比如token这些,但是实际上每个页面的数据差的很多,不能这么存的,实际意义很有限。


2.另一种就是我目前用的了,基于内存回收activty,变量也被回收了,做法是在application写一个public static的int变量值,值为-1,然后在启动页的onCreate里面把值变成1,然后在baseactivity的onCreate里面监听这个值,如果是-1说明变量被回收了,这个时候就可以跳转到主页,并把页面关了,如果之前有写管理activity的工具类,遍历一下关掉,可以在启动页做这个操作。

  这个方法的目的就是遇到内存被回收,跳到启动页然后到主页,我感觉是逻辑是通的,但是实际上我遇到了一个我目前无法解释的问题,也正是这个问题让我百思不得其解,烦恼了好久,就是当按照这么做来到主页的时候,主页各个fragment的控件初始化也执行了,然后请求数据,结果提示各种空指针,基本上都是像list和控件空指针,这就让人不动了,我打过log,确定是先执行了初始化才请求数据的,但是为啥空指针。查了好多资料,也在开发群请教了很多人,都表示不知道(PS:正常进入主页是好的,就是这种重启的就遇到这个问题),我最后的解决办法是,请求玩数据之后如果发现控件或者list之类是null就再次执行一次初始化,我也知道这个解决方法有点治标不治本,但是目前我只能想到这个方法,至于原因,希望以后哪位大牛能指导一下。


思路2里最重要的就是重新初始化,这个一定要注意,我就是这个卡了好久,一定要千万留心。


我把在网上找的2种思路的文章都贴一下,特别是第3篇文章,希望大家看一下,里面有讲怎么模拟app被内存杀死,这个一下子就方便了测试,我原来为了测试一上午能有个2次测到被内存回收就不错了.

思路1:https://www.2cto.com/kf/201505/396829.html


思路2:http://www.cnblogs.com/3A87/p/4861588.html

              https://www.2cto.com/kf/201606/513992.html


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。