- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
androidasynctask工作原理
Android AsyncTask工作原理
AsyncTask能够适当简单的使用在UI线程,在没有任务线程和handler的情况下,这个类也允许执行后台操作并将结果显示在UI线程上。
AsyncTask的引入,我们在执行完耗时的后台任务后可以很方便的更新UI元素。相信大多数同学对AsyncTask的用法都已经很熟悉,那这里不在叙述他的基本用法了。
AsyncTask的实现原理是封装线程池和消息机制,我已经在自己的博客写过了线程池和消息机制的。感兴趣的同学可以去阅读下。
那么直接进入AsyncTask的源码分析,一起从源码的角度彻底理解。
先从AsyncTask的构造方法看起
/**
* Creates a new asynchronous task. This constructor must be invoked on the UI thread.
*/
public AsyncTask() {
mWorker = new WorkerRunnableParams, Result() {
public Result call() throws Exception {
mTaskInvoked.set(true);
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
//noinspection unchecked
Result result = doInBackground(mParams);
Binder.flushPendingCommands();
return postResult(result);
}
};
mFuture = new FutureTaskResult(mWorker) {
@Override
protected void done() {
try {
postResultIfNotInvoked(get());
} catch (InterruptedException e) {
android.util.Log.w(LOG_TAG, e);
} catch (ExecutionException e) {
throw new RuntimeException(An error occurred while executing doInBackground(),
e.getCause());
} catch (CancellationException e) {
postResultIfNotInvoked(null);
}
}
};
}
从方法的注释我们知道,创建一个异步任务,这个构造方法必须要在UI线程中调用。
AsyncTask的构造方法中,首先创建了一个WorkerRunnable对象并赋值给mWorker,那么这个WorkerRunnable是什么呢?
private static abstract class WorkerRunnableParams, Result implements CallableResult {
Params[] mParams;
}
从上面的代码中可知道WorkerRunnable其实就是Callable。接着又创建了一个FutureTask对象,并将mWorker传进。AsyncTask的构造方法只是做了初始化的工作。
关于Callable和FutureTask我已经在线程池系列的博客中介绍过了。简单说就是FutureTask是Runnable的实现类,其中封装了Callable,当FutureTask的run方法被调用时,内部实际调用的是Callable的call方法。那么我们等下就寻找FutureTask的run方法在哪里被调用了, doInBackground方法也就是在那里开始被调用的。
那么接下来就是跟踪AsyncTask的 execute方法了,源码如下:
public final AsyncTaskParams, Progress, Result execute(P
您可能关注的文档
最近下载
- 走遍美国(中英文对照文本).doc
- 钢管结构技术规程 CECS280:2010.pdf VIP
- 高中语文思政融合专题讲座课件思政元素如何融入文言文教学.pptx
- 【一模】2025年广东省2025届高三高考模拟测试 (一) 数学试卷(含官方答案 ).docx
- 人教版高中地理选择性必修第2册 4.2.1 资源跨区域调配—以西气东输为例.ppt VIP
- SAE-ARP-5412B-2013飞机雷电环境和相关试验波形(修订版).pdf
- 2014记账凭证清单.doc VIP
- PIPESIM软件教程(必威体育精装版文档).pdf
- ISO5208-2015压力试验.pdf
- [深圳]2024年广东深圳市教育局遴选直属事业单位(学校)领导人员5人笔试历年典型考点(频考版试卷).docx VIP
文档评论(0)