最近遇到一个bug,比较奇怪,记录于此。
描述:将手机内存和SD卡空间填充至极限状态,之后开始通话,通话过程中点击录音发现出现拨号crash
由于是概率性事件,并且极限状态下测试总是抓不到log,问题搁置了2天。
之前录音点击事件只是添加了存储空间的判断,如果空间已满,则弹出提示框,让用户去释放内存空间,自认为是不会有什么问题。
第二天在去看这个问题,自己准备手动试一下。
1.从网上搞了一个填充内存的软件,把SD卡和内存充满到极限状态
2.通过应用启动拨号app
3.连接adb,通过adb logcat 来抓去log
终于出现了小概率事件,拨号crash,我那个叫激动
拿到log,赶紧分析,分析之后,就郁闷了,提示字串找不到、、、、、、字串在res中安静的呆着,不增不减,恰恰就是用到的,且编译也是正常的,这,我无语了。
不拉不拉,下面是解决办法,既然提示找不到,就要修改
办法:1 怀疑极限状态下,内存吃紧,因此apk包中的资源会找不到,因此替换为framework中公共的资源
2 加上try catch语句以防万一,如果真的找不到字串,就捕获异常,显示为“”,不至于app挂掉
更改之后终于呵呵呵,不会出现问题了
不过关于内存极限情况下的一些问题还是需要系统组比较清楚,这里只是针对这个问题的一种方法。
更改:
最近又回头看这个bug,发现更改的有问题,当时的想法也有问题
找不到的那个字串,重新搜索之后发现,该字串确实存在,但是对应的langguage不对,在设置为中文时,对应的中文字串找不到,且没有默认的字串
所以,只需要在默认和中文字串中添加相应的字串即可
唉,真心的是疏忽了、、、、、、