这个坑比较隐晦, 通常不容易出现.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