最近做一個項目,需要請求文件操作的權限。功能做好了,自己手機上測試,沒有問題。發給別人,在別人的手機上問題就來了。在別人手機上一點就崩潰了。那個按鈕上的事件是:先進行文件操作權限申請,有了權限就操作文件,然后做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界面。于是我在操作完文件后,手動切換回了主線程。
再試試吧,發現問題解決了。