Android-Application被回收引发异常分析

2018-11-13  本文已影响37人  王玮123

Hi All,
今天收到反馈的一个问题,说单例里面报了一个空指针导致项目会crash掉,所以今天分析了一下,感觉有借鉴意义

原因

直观的分析日志可以看到是因为单例里面的一个static的参数confignull导致的问题。

正常流程

1、设备入口
2、onCreate()方法里面调用单例init方法把参数传给单例 3、页面里面需要单例的方法直接获取这个单例 4、然后在退出登陆或者其他情况把单例destory() `

分析问题和猜测

复现问题

第一步:打开App到门禁流程中需要单例DataSourceInstance的界面。
第二步:按Home键退出应用。
第三步:使用DDMS-Stop Process结束进程。
第四步:回到项目应用中,正常使用(注:现在处于一个新的Application中,没有之前操作存储的数据了) 复现了出现该崩溃,验证了猜想。

解决办法

1、不在进入的入口页进行init操作,放在Application中初始化。(目前的处理办法)
因为每次App被回收重建的时候都会执行onCreate方法。这样就会避免这样的问题
2、本地存储(不建议使用,不具有实时性)
3、用dagger进行参数和对象的注入,不设置全局的变量,动态按需注入。
原因和第一步一样,dagger是在applicationinit的。当页面中需要注入的参数没有就会new一个新的。
4、当然还有其他的解决方案,欢迎讨论。

上一篇 下一篇

猜你喜欢

热点阅读