這個坑比較隱晦, 通常不容易出現.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