异步加载AsyncTask小谈+实例
AsyncTask是Android解决异步加载的一种方案,它比Handler和Message的方式更加轻量级。
一般的使用步骤:
自定义一个继承AsyncTask的类。自定义时可以传入AsyncTask的3个泛型参数,即Params,Progress和Result。Params是需要传入的参数,Progress是进程执行的百分比,Result是最终返回的结果。
实现从AsyncTask继承下来的方法。
主要有onPreExecute()、doInBackground(Params...)、onProgressUpdate(Progress...)和onPostExecute(Result)四种方法。
其中,
onPreExecute():执行实际后台操作之前被调用。
doInBackground(Params...):紧跟onPreExecute()之后进行的实际后台操作,一般进行比较耗时 的操作,更新实时任务进度,可以调用publishProgress()。
onProgressUpdate(Progress...):运行与UI线程,可更新实时进度。
onPostExecute(Result):运行于UI线程,其参数就是doInBackground()的返回值。
3.在主线程中创建AsyncTask对象,并调用execute()方法。
具体示例来展示AsyncTask异步加载:
MainActivity代码:
public class MainActivity extends Activity {
private TextView textview;
private Button button;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textview=(TextView)findViewById(R.id.text);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
LoadTask task=new LoadTask();
task.execute();
}
});
}
private class LoadTask extends AsyncTask<Void,Integer,String>{
private ProgressDialog progressdialog;
protected String doInBackground(Void... params) {
// TODO Auto-generated method stub
int sum=1;
while(sum<=10){
try {
Thread.sleep(1000);
publishProgress(sum);
sum++;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return "加载完成。";
}
//紧跟onPreExecute()之后紧跟的操作,进行耗时操作,利用publishprogress()更新。
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
progressdialog=progressdialog.show(MainActivity.this, "AsyncTask Demo", "载入中...",true);
}
//在doinbackground之前调用,创建一个对话框。
protected void onProgressUpdate(Integer...values){
textview.setText(values[0]*10+"%");
}
//运行于ui线程,更新实时进度。
protected void onPostExecute(String result){
progressdialog.dismiss();
textview.setText(result);
}
//运行于ui线程,返回值就是doInBackground()的返回值。
}
}
xml代码:
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="--" />
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/text"
android:layout_marginTop="24dp"
android:text="开始载入" />
点击按钮,即可实现异步加载。
转载于:https://blog.51cto.com/bigcrab/1708766
异步加载AsyncTask小谈+实例相关推荐
- BUI Grid异步加载分页小计
公司要做一个新的管理系统,因为老大嫌弃之前easyUI的版面太丑(......),要用BUI重新做一套,悲催的我开始研究BUI的控件,发现API描述的也不是太清楚,加载顺序也不太明确,在这里自己总结一 ...
- AsyncTask异步加载的源码分析与实现实例
一 . AsyncTask Android的Lazy Load主要体现在网络数据(图片)异步加载.数据库查询.复杂业务逻辑处理以及费时任务操作导致的异步处理等方面.在介绍Android开发过程中,异步 ...
- 小程序 ajax 加载,小程序实战-小程序网络请求异步加载
最初看到小程序的网络请求的时候,尤其是演示示例中,userInfoReadyCallback这个函数更是一头雾水.其实并不怎么理解.一直很费解.网上各路大侠都有解释,但是就是,不知道是怎么个顺序,而我 ...
- Android批量图片加载经典系列——使用LruCache、AsyncTask缓存并异步加载图片
一.问题描述 使用LruCache.AsyncTask实现批量图片的加载并达到下列技术要求 1.从缓存中读取图片,若不在缓存中,则开启异步线程(AsyncTask)加载图片,并放入缓存中 2.及时移除 ...
- android学习笔记---64_ListView数据异步加载与AsyncTask
2013/5/26 Java技术qq交流群:JavaDream:251572072 64_ListView数据异步加载与AsyncTask ------------------------------ ...
- Android 使用AsyncTask 后监听异步加载完毕的动作
AsyncTask 的使用方法网上有很多例子,使用起来也非常的方便.这里就不详细说具体的使用方法了,同学可以Google 一下,很多. 场景模拟 当我们在加载一个列表的时候,比如GridView ,这 ...
- Android通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比
在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一是 ...
- Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比
Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比 标签: AndroidAsyncTaskThreadPool异步加载view 2 ...
- 浅谈Android中的异步加载之ListView中图片的缓存及优化三
隔了很久没写博客,现在必须快速脉动回来.今天我还是接着上一个多线程中的异步加载系列中的最后一个使用异步加载实现ListView中的图片缓存及其优化.具体来说这次是一个综合Demo.但是个人觉得里面还算 ...
最新文章
- Alpha Go 之父恩师Tomaso Poggio:深度学习需要从炼金术走向化学
- 在Rancher 1.6上部署Traefik负载均衡器
- 如何解决实际错误:配置IIS使其支持SSL加密的HTTPS,并且要求浏览器客户端证书
- vb与matlab数据交互时间延时多长,VB中实现延时(等待)的几种方法
- 2019年下信息系统项目管理师真题讲解【视频+PDF下载】
- windows残留软件卸载
- python构建二叉树_BinaryTree:学习二叉树的Python库
- Eclipse安装VJET报错解决办法
- 对比学习有多火?文本聚类都被刷爆了…
- 5月上海见-国际产学研专家集结第六届全球云计算大会中国站
- 校园网如何更改ip地址
- cmd连局域网mysql_cmd连接局域网mysql
- DNS服务器未响应惊叹号,怎么办呢电脑连接网络出现感叹号?
- 阿里acp认证是什么 阿里acp认证含金量高吗
- 视觉slam中的一种单目稠密建图方法
- 计算机网络期末试题及答案
- php读写excel文件
- 谷歌帮:中国最牛的创业帮派
- unwrap bug
- win10 WSL运行32位程序
热门文章
- c语言编程蛇形,蛇形矩阵c语言实现
- php中mysql数据库集群,MySQL集群
- Python自动化整理文件,还增加了可视化GUI界面
- php启动端口修改,PHP_启动服务端口报错
- rfp计算机,RFP(中英文).doc
- upgrade cmake-gui version
- Farthest points Sampling on 3D meshes with mesh kept based on diffusion distance
- maya中将每帧渲染成图片,再用播放器播放
- 【java】二维数组的应用
- js控制css 加载,CSS样式表的加载对于DOM解析,渲染,JS执行的阻塞问题