Launcher进入二级界面闪退回主界面问题

本文分析了一个Android Launcher在进入二级界面时概率性闪退回主界面的问题。问题根源在于数据库widgetpreviews.db中某个apk的图标数据为空,导致加载时闪退。解决方案是在读取数据时增加判断,若数据为空则删除并异步生成新的图标数据。
摘要由CSDN通过智能技术生成

一、问题:在这里插入图片描述
二、分析
因为是概率出现的问题应该从数据获取的位置分析,也就是WidgetPreviewLoader.java文件的readFromDb函数着手,加入调试信息如下:
在这里插入图片描述
打印的结果如下,发现Shortcut:com.android.settings/com.android.settings大小为162x210从数据库中获取的二进制位图数据为0,
在这里插入图片描述
将设备里面的数据库widgetpreviews.db使用sqlite浏览器(sqlite expert professional)查看shortcut_and_widget_previews表里面的数据发现,这就是导致闪退的问题所在。
在这里插入图片描述
结论是Launcher在进入二级界面会写入并加载widgetpreviews.db数据库中shortcut_and_widget_previews表里面的apk图标数据preview_bitmap,结果有个apk的数据在写入数据库的时候出错,变成了null(低概率),最终导致了闪退问题。

三、解决
在加载对应apk图标数据的时候加入判断,如果从数据库中读出的数据为null,那么就删除该数据,然后调用线程AsyncTask生成新的数据信息并加载就可以解决问题。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值