引用从here获得的AsyncTask文档,它说


  
  必须在UI线程上加载AsyncTask类。这个做完了
  从JELLY_BEAN开始自动生成。
  必须在以下位置创建任务实例
  UI线程。
  execute(Params...)必须在UI线程上被调用。
  做
  不调用onPreExecute()onPostExecute(Result)
  doInBackground(Params...)onProgressUpdate(Progress...)手动。
  


现在在UI线程上创建AsyncTask引用的原因是什么?这是Looper的问题吗?

最佳答案

我认为这样做是为了确保处理程序已在UI线程上初始化,因此在处理程序的构造函数中,myLooper()将返回mainUIThreadLooper,并且稍后发送的消息将传递至UI线程。

public abstract class AsyncTask<Params, Progress, Result> {
    private static final InternalHandler sHandler = new InternalHandler();
....
}




public Handler() {
   ...
   mLooper = Looper.myLooper();
   ...
}

09-16 06:17