设为首页 加入收藏

TOP

Android异步任务(AsyncTask)的设计思想(三)
2014-11-24 01:09:15 来源: 作者: 【 】 浏览:14
Tags:Android 异步 任务 AsyncTask 设计思想
tp://path/to/file";
new SubHandlerAndThread().doInBackground(url);
}

class SubHandlerAndThread extends HandlerAndThread {
@Override
protected String runInBackend(String url) {
System.out.println("Start download from url:" + url);
for (int i = 0; i < 10; ++i) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
publishProgress(i*10);
}

return "/path/to/file";
}

@Override
protected void onPostExecute(String filePath) {
System.out.println("Download finished");
}

@Override
protected void onProgressUpdate(int progress) {
System.out.println("Progress: " + progress);
}
}
}


这是不是跟Android的AsyncTask很像呢,我想Google就是由于这种需求做出这个类的,Android官网是这样描述AsyncTask的:



This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers.


意思是这个类使得:不使用Thread和Handler,就可以在后台执行操作然后在发布结果到UI线程。其实他内部的实现就是封装了Thread和Handler,所以你就不必要直接用这两个低层类了,但他的目的也是代码复用,他的实现跟我们上面写的类也差不多。主要有这几点不同:一、AsyncTask使用了线程池而不是单个线程去执行后台任务,该线程池是整个进程共用的,是因为他的线程池对象是一个静态成员变量,这一点很多人搞错,误以为AsyncTask越来创建的线程越多,这不是绝对正确的,因为线程池会根据负载动态调整的,而且有最大值和空闲超时,AsyncTask的配置是最小5,最大128,空闲超时1秒,当然你也可以配置成线程数根据任务数线程递增,关于线程池,可参考这里,后续我会在博客写文章讨论Java线程池;二、AsyncTask的输入和输出参数使用了泛型;三、AsyncTask支持中断当前任务。


现在知道了AsyncTask的设计思想了吧,是不是很简单呢,所以建议童鞋们去看一下它的源码,反正我写代码时有查看源码的习惯,因为我会好奇它是如何实现的,看源码有很多好处,如可以学到好的API设计思想,软件架构,特别是当你遇到技术问题无法解决,网上也搜索不到时,你可以通过查看源码来找到解决办法,我就经常这么干。


所以提议大家在开发时学会看源码利用源码,一定要耐心,一篇看不懂不要气馁,多看几篇一定会看懂的。


首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Emacs开发Java之使用 下一篇2013年阿里算法笔试题解题报告

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: