android两种异步实现方式总结(一)
来源:互联网 发布:什么域名代表公司 编辑:程序博客网 时间:2024/06/05 01:05
第一种:AsyncTask
AsyncTask是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度,最后反馈执行结果给UI主线程。它比Handler更轻量级。
一个task实例只能调用一次。
AsyncTask提供了三种泛型参数,并重载至少一个方法。
三个参数:
parames:启动任务输入的参数,比如url等
progress:后台执行任务的百分比
result:后台执行任务最终返回的结果
几个方法:
doInBackground(params..):耗时的后台操作,这里不能进行ui主线程更新操作,可以用publishProgress来更新进度
onPostExecute(Result):类似于Handler中更新UI主线程
onProgressUpdate(Progress...):增加进度条,提高用户体验度
onCancelled():用户调用取消时要做的操作
优点:
简单,快捷
过程可控
缺点:
在使用多个异步操作并需要进行UI更新时就变得复杂起来
使用场景:
改善设计,少用异步,线程的开销是很大的
与主线程有交互时使用AsyncTask,否则用Thread即可
对于有需要大量线程执行任务时,一定要创作线程池
对于想要立即开始执行的异步任务,要么直接使用Thread,要么单独创建线程池提供给AsyncTask
1. task.executeOnExecutor(Executors.newCachedThreadPool()); 无限制线程池
2. Executors.newFixedThreadPool(7);最大值为7的线程池
3. Executors.newSingleThreadExecutor():单个线程的线程池
代码:
public class MyAsyncTask extends AsyncTask<Integer, Integer, String>
{
private ProgressBar progressBar;
public MyAsyncTask(ProgressBar progressBar)
{
super();
this.progressBar = progressBar;
}
@Override
protected String doInBackground(Integer... arg0)
{
int i = 0;
for (i = 0; i <= 100; i += 10)
{
try
{
Thread.sleep(300);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
publishProgress(i);
}
String result = (i - 10) + arg0[0].intValue() + "";
return result;
}
@Override
protected void onPostExecute(String result)
{
}
@Override
protected void onPreExecute()
{
}
@Override
protected void onProgressUpdate(Integer... values)
{
int value = values[0];
progressBar.setProgress(value);
}
}
- android两种异步实现方式总结(一)
- android两种异步实现方式总结(二)
- Android实战简易教程-第四十九枪(两种方式实现网络图片异步加载)
- Android实战简易教程<四十九>(两种方式实现网络图片异步加载)
- ASP.NET的异步实现方式总结(一)
- Android 两种异步操作方式
- Android-动态加载插件化的两种实现方式(一):反射
- Solr学习总结(一)两种启动方式
- GCD实现异步任务同步的两种方式
- Spring定时器的两种实现方式一(timer)
- 图片轮播的两种实现方式(一)
- 多线程一:两种方式实现多线程
- Android Service两种启动方式详解(总结版)
- Android:View Animition 两种实现方式
- Android放大镜实现的两种方式
- Android TabHost两种实现方式
- Android实现计算器的两种方式
- Android放大镜实现的两种方式
- hdu 1421 dp
- Ubuntu下安装和配置Apache2
- android解析xml三种方式学习总结
- unity 3D 程序优化 资料积累
- Nokia C7-00 wifi下的代理设置
- android两种异步实现方式总结(一)
- 训练指南第一部分解题报告
- android两种异步实现方式总结(二)
- bzoj2518: [Shoi2010]滚动的正四面体 线段树
- Linux查看设备信息
- HDU_3565 Are You Busy(DP,状态转换)
- 杭电2039 三角形
- jsp页面特殊字符展示处理
- 中文传参乱码问题解决思路