AsyncTask源码分析

  • 时间:
  • 浏览:2

接下来11行执行了doInBackground(mParams)法律方式,通常让我们让我们让我们让我们让我们让我们 会重写该法律方式来实现业务逻辑操作。假如有一天执行postResult 法律方式,假如有一天将结果返回给FutureTask(机会是FutureTask.run法律方式调用的此call法律方式,而是时要返回结果到 FutureTask.run法律方式)。这里让我们让我们让我们让我们让我们让我们 先看看postResult:

AsyncTask构造法律方式:

由FutureTask源码让我们让我们让我们让我们让我们让我们 回会 看出,run()法律方式上边调用了c.call(),而AsyncTask 中创建FutureTask的但是 传入了mWorker,而是FutureTask.run()法律方式上边c.call()调用的是mWorker对象的 call()法律方式,而AsyncTask里mWorker重写了call法律方式,即上边8-14行,而是c.call()会执行到 mWorker.call()法律方式来。call法律方式上边11行将多多线程 的优先级设置为后台多多线程 ,那我当多个多多线程 并发后而是无关紧要的多多线程 分配的CPU时间将 会减少,能够主多多线程 的正确处理。

关于AsyncTask的用法回会 参看前面一篇博客《AsyncTask实现断点续传》,本文只解析AsyncTask的源代码。

由下面代码回会 看出,AsyncTask有并算不算 具体情况:PENDING(未运行)、RUNNING(正在运行)、FINISHED(已运行完毕)。

FutureTask代码:

finish的作用是机会task被收回了就执行onCancelled法律方式,机会这麼 被收回而是 正常执行完毕,则执行onPostExecute 法律方式(这也是为那先 task被调用了cancel法律方式,无需执行onPostExecute的是因为)。最后将task的具体情况标记为FINISHED。

最终会执行finishCompletion()法律方式。

publishProgress法律方式最终也会通过sHandler来调用AsyncTask的onProgressUpdate法律方式,一般让我们让我们让我们让我们让我们让我们 机会时要获取进度励志的话 都时要重写AsyncTask的onProgressUpdate。

这里主而是 验证postResult算不算被调用了,机会这麼 被调用着调用postResult函数,机会前面mWorker.call法律方式上边调用过了,而是这里不错操作。

AsyncTask.execute法律方式:

就看21行代码,会执行FutureTask的done()法律方式,而这种 法律方式在AsyncTask构造函数中初始化FutureTask对象的但是 被重写了。

顺便提一下,在AsyncTask的doInBackground法律方式中机会时要更新UI励志的话 ,则调用AsyncTask的publishProgress法律方式即可:

好了,AsyncTask的源码也分析完了。再次总结一下Asynctask使用的注意事项:

上边说到mWorker.call会将执行结果返回给FutureTask.run()法律方式假如有一天继续往下执行,让我们让我们让我们让我们让我们让我们 再次看看FutureTask.run法律方式(20-30行):

execute法律方式上边直接调用了executeOnexecute法律方式。

由第9行代码可知最终会执行AsyncTask的finish法律方式,代码如下:

AsyncTask.executeOnexecute法律方式:

3-13行是检测AsyncTask的具体情况,机会具体情况不为PENDING,则会抛异常,这也是为那先 有另2个 AsyncTask回会 被执行一次的是因为。14行将具体情况改为RUNNING,表示该任务正在运行。假如有一天调用AsyncTask的onPreExecute()法律方式。

由上边代码回会 就看,执行完c.call后,会执行set(result)法律方式。

这里的sHandler是InternalHandler对象。