引用从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();
...
}