Android 開發中踩過的坑之四:低版本使用AsyncTask

這個坑比較隱晦, 通常不容易出現.oop


有可能在使用AsyncTask時, 明明就是在postResult()方法裏設置UI, 卻被告知不能在非UI線程設置UI的異常.post

這實際上應用App啓動時的一個bug. AsyncTask是在初始化的時候, 本身取當前的線程獲取Looper. 可是問題來了, spa

當前線程可能並非UI線程, 因此就致使了postResult()等本來應該在UI線程工做方法, 實際上在非UI線程.線程

谷歌在4.1之後版本里解決這個bug, 就是在應用啓動時, 在UI線程裏先調用了一次AsyncTask.init(). 這樣在當前應用裏, AsyncTask的Looper就是UI線程的Looper了. it

可是在4.1之前的版本里, 使用AsyncTask前, 自行在UI線程裏調用一下AsyncTask.init()吧bug

相關文章
相關標籤/搜索