最近做一个项目,需要请求文件操作的权限。功能做好了,自己手机上测试,没有问题。发给别人,在别人的手机上问题就来了。在别人手机上一点就崩溃了。那个按钮上的事件是:先进行文件操作权限申请,有了权限就操作文件,然后做UI处理。
首先我怀疑的是权限申请的代码可能有什么不兼容,导致App崩溃。我的权限申请代码是自己写的,我怀疑我自己写的有问题。于是我换了一个比较流行的权限申请框架。经测试后,还是不行。
由于手机并不在我身边,我看不到日志。于是我又加上了腾讯的bugly。重新打了包,给别人测试。然后发现了如下错误:
AndroidRuntime: FATAL EXCEPTION: DefaultDispatcher-worker-1
AndroidRuntime: JAVA.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied
……
bugly还是很优秀的,还给了我好几个可能有用的解决方案。然而细读一下,发现那些解决方案并不适合我遇到的情况。
我有一点儿绝望了,开始求助于其他人了。然而没有什么用。
我又去看了一眼,bugly给我的解决建议。在一堆中文和英文中,我发现了一个单词,thread。嗯,线程。我开始有些怀疑我代码中的线程处理了。
再去看看代码吧,发现我在IO线程中操作文件,然后回调了一个方法,这个回调方法中操作了UI界面。于是我在操作完文件后,手动切换回了主线程。
再试试吧,发现问题解决了。