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

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

三、解决
在加载对应apk图标数据的时候加入判断,如果从数据库中读出的数据为null,那么就删除该数据,然后调用线程AsyncTask生成新的数据信息并加载就可以解决问题。
Launcher进入二级界面闪退回主界面问题