AsyncTask源码分析

  • 时间:
  • 浏览:3
  • 来源:uu快3漏洞_uu快3链接_公式

顺便提一下,在AsyncTask的doInBackground措施 中将会还都能不能更新UI语句,则调用AsyncTask的publishProgress措施 即可:

这里的sHandler是InternalHandler对象。

由第9行代码可知最终会执行AsyncTask的finish措施 ,代码如下:

由下面代码还都能不能看出,AsyncTask有并是不是状况:PENDING(未运行)、RUNNING(正在运行)、FINISHED(已运行完毕)。

接下来11行执行了doInBackground(mParams)措施 ,通常亲戚亲戚让我们会重写该措施 来实现业务逻辑操作。怎么让执行postResult 措施 ,怎么让将结果返回给FutureTask(将会是FutureTask.run措施 调用的此call措施 ,全都全都还都能不能返回结果到 FutureTask.run措施 )。这里亲戚亲戚让我们先看看postResult:

由后面 代码还都能不能看到,执行完c.call后,会执行set(result)措施 。

finish的作用是将会task被撤出 了就执行onCancelled措施 ,将会没办法 被撤出 可是正常执行完毕,则执行onPostExecute 措施 (这也是缘何task被调用了cancel措施 ,我越多 执行onPostExecute的愿因 )。最后将task的状况标记为FINISHED。

这里主可是验证postResult是是不是被调用了,将会没办法 被调用着调用postResult函数,将会前面mWorker.call措施 后面 调用过了,全都全都这里不错操作。

3-13行是检测AsyncTask的状况,将会状况不为PENDING,则会抛异常,这也是缘何4个多AsyncTask只能被执行一次的愿因 。14行将状况改为RUNNING,表示该任务正在运行。怎么让调用AsyncTask的onPreExecute()措施 。

看到21行代码,会执行FutureTask的done()措施 ,而什儿 措施 在AsyncTask构造函数中初始化FutureTask对象的刚刚被重写了。

最终会执行finishCompletion()措施 。

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

publishProgress措施 最终也会通过sHandler来调用AsyncTask的onProgressUpdate措施 ,一般亲戚亲戚让我们将会还都能不能获取进度语句都还都能不能重写AsyncTask的onProgressUpdate。

FutureTask代码:

AsyncTask.execute措施 :

后面 说到mWorker.call会将执行结果返回给FutureTask.run()措施 怎么让继续往下执行,亲戚亲戚让我们再次看看FutureTask.run措施 (20-1000行):

execute措施 后面 直接调用了executeOnexecute措施 。

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

AsyncTask.executeOnexecute措施 :

由FutureTask源码亲戚亲戚让我们还都能不能看出,run()措施 后面 调用了c.call(),而AsyncTask 中创建FutureTask的刚刚传入了mWorker,全都全都FutureTask.run()措施 后面 c.call()调用的是mWorker对象的 call()措施 ,而AsyncTask里mWorker重写了call措施 ,即后面 8-14行,全都全都c.call()会执行到 mWorker.call()措施 来。call措施 后面 11行将多tcp连接 的优先级设置为后台多tcp连接 ,4个多多当多个多tcp连接 并发后全都全都无关紧要的多tcp连接 分配的CPU时间将 会减少,不不利于主多tcp连接 的补救。

AsyncTask构造措施 :