Android之AsyncTask异步加载(三)
2016-07-23 12:52
411 查看
这里使用Asynctask异步加载模拟了一个下载的效果
先来看效果图:
前面我已经讲过异步加载的概念和使用~
有不懂的可以看前几篇~
代码实现:
1.布局文件:
3.编写DownloadTask类:
好了,代码其实蛮简单的,重在理解~
想要源码的:http://download.csdn.net/detail/qq_33642117/9584055
先来看效果图:
前面我已经讲过异步加载的概念和使用~
有不懂的可以看前几篇~
代码实现:
1.布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onclick" android:text="开始下载"/> <ProgressBar android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/pb" style="@android:style/Widget.ProgressBar.Horizontal"/> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>2.MainActivity:
public class MainActivity extends Activity { private ProgressBar pb; private TextView tv; public void onclick(View view) { // TODO Auto-generated method stub DownloadTask downloadTask=new DownloadTask(pb, tv); downloadTask.execute(1000);//睡眠1秒 } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); tv=(TextView) findViewById(R.id.tv); pb=(ProgressBar) findViewById(R.id.pb); } }在这个Activity中实现了一个继承Asynctask的类:DownloadTask
3.编写DownloadTask类:
/* * Params:输入参数,如果不需要传递参数,则直接设为Void即可 * Progress:子线程执行的百分比 * Result:返回的参数 */ public class DownloadTask extends AsyncTask<Integer, Integer, String>{ private ProgressBar pb; private TextView tv; public DownloadTask(ProgressBar pb,TextView tv) { super(); // TODO Auto-generated constructor stub this.pb=pb; this.tv=tv; } //第一个调用 //执行时机:在执行实际的后台操作前,被UI线程调用 //作用:可以在该方法中做一些准备工作 //这个方法可以不用实现, @Override protected void onPreExecute() { // TODO Auto-generated method stub System.out.println("准备"); super.onPreExecute(); } //doInBackground有返回值,并且返回值是由result决定的, //参数列表首先是一个可变长参数,是由Params决定的 //执行时机:在onPreExecute方法执行后马上执行,该方法运行在后线程中 //作用:主要负责执行那些很耗时的后台处理工作,可以调用publishProgress方法来更新实时的任务进度 @Override protected String doInBackground(Integer... params) { // TODO Auto-generated method stub try { for (int i = 0; i <101; i++) { Thread.sleep(params[0]);//睡眠 publishProgress(i);//相当于handler.sendMessge } } catch (Exception e){ // TODO Auto-generated catch block e.printStackTrace(); return "下载失败"; } return "下载完成"; } //参数列表是由Progress决定的 //执行时机:这个函数在doInBackground调用publishProgress时才会调用这个方法 //没返回值,不会主动调用 //作用:在界面展示任务的进展情况 @Override protected void onProgressUpdate(Integer... values) { // TODO Auto-generated method stub pb.setProgress(values[0]); tv.setText("当前下载了"+values[0]+"%"); super.onProgressUpdate(values); } //参数是由result决定的 //作用:后台的计算结果将显示出来 //可以进行一些结束处理 @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub tv.setText(result); super.onPostExecute(result); } }
好了,代码其实蛮简单的,重在理解~
想要源码的:http://download.csdn.net/detail/qq_33642117/9584055
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories