Android 开发中踩过的坑之四:低版本使用AsyncTask

这个坑比较隐晦, 一般不容易出现.


有可能在使用AsyncTask时, 明明就是在postResult()方法里设置UI, 却被告知不能在非UI线程设置UI的异常.

这实际上应用App启动时的一个bug. AsyncTask是在初始化的时候, 自己取当前的线程获取Looper. 但是问题来了, 

当前线程可能并不是UI线程, 所以就导致了postResult()等原本应该在UI线程工作方法, 实际上在非UI线程.

谷歌在4.1以后版本里解决这个bug, 就是在应用启动时, 在UI线程里先调用了一次AsyncTask.init(). 这样在当前应用里, AsyncTask的Looper就是UI线程的Looper了. 

但是在4.1以前的版本里, 使用AsyncTask前, 自行在UI线程里调用一下AsyncTask.init()吧

你可能感兴趣的:(Android 开发中踩过的坑之四:低版本使用AsyncTask)