在新线程中更新UI还必须要引入handler,这让代码看上去非常臃肿。
为了解决这一问题,Android在1.5版本引入了android.os.AsyncTask。AsyncTask的特点是任务在主线程之外运行,而回调方法是在主线程中执行,这就有效地避免了使用Handler带来的麻烦。AsyncTask的任务其实最后是在 AsyncTask 本身的 一个静态线程池变量中被执行的。当然因为 线程池变量为静态的 ,所以 所有的AsyncTask实例的任务其实是在同一个线程池中被执行的。AsyncTask类本身有一个静态的Handler.
为了解决这一问题,Android在1.5版本引入了android.os.AsyncTask。AsyncTask的特点是任务在主线程之外运行,而回调方法是在主线程中执行,这就有效地避免了使用Handler带来的麻烦。AsyncTask的任务其实最后是在 AsyncTask 本身的 一个静态线程池变量中被执行的。当然因为 线程池变量为静态的 ,所以 所有的AsyncTask实例的任务其实是在同一个线程池中被执行的。AsyncTask类本身有一个静态的Handler.
该Handler用无参数的构造函数进行实例化。与UI进行交互的AsyncTask的函数接口cancel(),onProgressUpdate(),onPostExecute()最终也是在该Handler上进行调用。为了确保UI的线程安全,该Handler必须在UI线程上。因此AsyncTask类必须在UI线程上被载入。当然为了安全AsyncTask必须在UI线程上被实例。