看到这个错误有点懵逼
我app里面就没有authStatus_xxx.xml文件,努力排除一下可以在shared_prefs中产生文件的,发现arouter会产生一些文件,于是屏蔽arouter这个库,发现屏蔽之后还是报错.而且错误不变.
网上百度一下说是 sdk无法删除遗留文件,那么通过adb命令来删除试试,仔细一推敲,发现就是胡扯,客户的机器会让你操作,就算是这种原因你这种解决思路也有问题,于是放弃这种想法.
继续排出第三方库,发现还可能存在问题的话就只剩下百度地图的, 看到一博客说动态申请权限可以解决这种问题,但是检查自己的代码之后发现,我在启动的时候就已经申请了所有的权限,不可能,我第一次运行可以,第二次运行就出现这个问题,我有放弃了.
继续找...
看完第三方的库之后,我反复整理了报错页面的代码,从activity跳回fragment更新数据,网络请求而已,也没有数据保存什么操作,怎么可以会报错...我在怀疑会不会是更新UI的操作放到主线程了,但是如果是这样的话,应该不会报这个错...于是我按照这个思路去找线索,发现一个可疑的类 com.eightbitlab.rxbus
发现代码
Bus.observe<SelectLoopBean>().subscribe {
tvProjectView.text = it.label
getMapData(it.value)
}.registerInBus(this)
在想会不会是这个textview更新的时候在子线程导致,进入源码发现中发现中括号的代码根本就没法保证一定是在UI线程(虽然我没有看完所有的源码) 于是我修改为:
Bus.observe<SelectLoopBean>().subscribe {
activity?.runOnUiThread {
tvProjectView.text = it.label
}
getMapData(it.value)
}.registerInBus(this)
试着运行一下,尽然不报错了.算是解决了.只是不明白为什么报的是
SharedPreferencesImpl: Couldn't create directory for SharedPreferences file
等下次有时间在看一下com.eightbitlab.rxbus 的源码