Android API 3时引进了AsyncTask,也叫异步任务。使用它可以很方便的更新主线程中的UI,使用它比Handler、Thread更简单。由于AsyncTask是抽象类,要使用它首先要创建子类继承它。创建子类时需要三个泛型参数

Params   调用execute时传入的参数,

Progress  需要显示的进度信息

Result   任务执行完毕后doInBackground的返回值

看下使用AsyncTask控制进度条的效果

代码实现

  1. package com.example.asynctaskdemo;
  2. import android.app.Activity;
  3. import android.os.AsyncTask;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. import android.widget.ProgressBar;
  9. /**
  10. * AsyncTask的简单使用
  11. *
  12. * @author Administrator
  13. *
  14. */
  15. public class MainActivity extends Activity {
  16. private ProgressBar pro = null;
  17. private Button start = null;
  18. private Button stop = null;
  19. private boolean isExe = false;
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.main);
  24. pro = (ProgressBar) findViewById(R.id.progress);
  25. start = (Button) findViewById(R.id.start);
  26. stop = (Button) findViewById(R.id.stop);
  27. final UpdatePro updatePro = new UpdatePro();
  28. // 开始任务
  29. start.setOnClickListener(new OnClickListener() {
  30. @Override
  31. public void onClick(View v) {
  32. // TODO Auto-generated method stub
  33. if (!isExe) {
  34. // 一个任务只能被执行一次,否则会报异常
  35. updatePro.execute();
  36. isExe = true;
  37. }
  38. }
  39. });
  40. // 结束任务
  41. stop.setOnClickListener(new OnClickListener() {
  42. @Override
  43. public void onClick(View v) {
  44. // TODO Auto-generated method stub
  45. if (isExe) {
  46. updatePro.cancel(true);
  47. }
  48. }
  49. });
  50. }
  51. /**
  52. * 更新UI线程
  53. *
  54. * @author Administrator
  55. *
  56. */
  57. class UpdatePro extends AsyncTask<Void, Integer, Boolean> {
  58. private int downloadPercent = 0;
  59. /**
  60. * 核心的操作
  61. */
  62. @Override
  63. protected Boolean doInBackground(Void... params) {
  64. // TODO Auto-generated method stub
  65. try {
  66. while (true) {
  67. downloadPercent = downloadPercent + 10;
  68. // 把数据传给onProgressUpdate更新UI
  69. publishProgress(downloadPercent);
  70. if (downloadPercent >= 300) {
  71. //downloadPercent = 0;
  72. break;
  73. }
  74. System.out.println("----- downloadPercent = "
  75. + downloadPercent);
  76. Thread.sleep(10000);
  77. }
  78. } catch (Exception e) {
  79. return false;
  80. }
  81. return true;
  82. }
  83. /**
  84. * 获取doInBackground返回的结果
  85. */
  86. @Override
  87. protected void onPostExecute(Boolean result) {
  88. // TODO Auto-generated method stub
  89. System.out.println("--------------onPostExecute " + result);
  90. super.onPostExecute(result);
  91. }
  92. /**
  93. * 最先执行 初始化工作
  94. */
  95. @Override
  96. protected void onPreExecute() {
  97. // TODO Auto-generated method stub
  98. System.out.println("--------------onPreExecute");
  99. pro.setProgress(0);
  100. super.onPreExecute();
  101. }
  102. /**
  103. * 得到publishProgress传入的值,更新UI
  104. */
  105. @Override
  106. protected void onProgressUpdate(Integer... values) {
  107. // TODO Auto-generated method stub
  108. System.out.println("--------------onProgressUpdate  " + values[0]);
  109. pro.setProgress(values[0]);
  110. super.onProgressUpdate(values);
  111. }
  112. }
  113. }

Demo下载:http://files.cnblogs.com/android100/AsyncTaskDemo.zip

Android开发之AsyncTask的使用的更多相关文章

  1. Android开发之AsyncTask示例Demo

    今天做了一个AsyncTask的小Demo,内含注释,通过此Demo,可以对AsyncTask有一个详细的了解 已经将项目上传到了GitHub上(程序有一个小bug,在第一次提交有说明,有解决方法请留 ...

  2. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  3. Android开发之InstanceState详解(转)---利用其保存Activity状态

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  4. Android开发之Java集合类性能分析

    对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...

  5. Android开发之Git配置

    Android开发之Git配置 1.首先git配置: 输入命令: git config --global user.name "xxx.xx" git config --globa ...

  6. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

  7. Android开发之旅: Intents和Intent Filters(理论部分)

    引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...

  8. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  9. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

随机推荐

  1. 用javascript请求动态页url返回更新

    例如我们用Ajax请求一个动态页返回的信息,或一个图片验证码请求一个*.ashx页面,第一次请求没问题,而第二次请求时,不变化,为啥? 因为第二次及以后请求的url与第一次是一样的,所以服务器(或是浏 ...

  2. Android 之 应用未捕获异常处理

    最近开发一款低功耗蓝牙通讯的 Android 应用,安装使用时多次出现“ 抱歉,xxx已停止 ”.现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出 ...

  3. setTimeout迭代替换setInterval

    一.它们之间的区别 setTimeout - 仅执行一次 setInterval - 间隔执行     二.为什么推荐用setTimeout替换掉setIntelval?   javascript是异 ...

  4. 开发JAVA9以上的项目时,出现ClassNotFoundException: javax.xml.bind.JAXBException的解决方法

    一.问题描述: 开发JAVA9以上的项目时,出现ClassNotFoundException: javax.xml.bind.JAXBException的解决方法 二.问题样例 三.解决方案 打开mv ...

  5. Plupload上传插件中文帮助文档

    Plupload上传插件中文帮助文档 配置参数 实例化一个plupload对象时,也就是 new plupload.Uploader(),需要传入一个对象作为配置参数.后面内容中出现的plupload ...

  6. java动态代理_aop2

      一.什么是代理? 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 代理模 ...

  7. Python学习笔记三:模块

    一:模块 一个模块就是一个py文件,里面定义了一些业务函数.引用模块,可以用import语句导入.导入模块后,通过 模块.函数名(参数)  来使用模块中的函数.如果存在多个同名模块,则前面模块名需要加 ...

  8. Linux Shell 下载网站指定文件

    Shell脚本,用来从网站下载指定文件名的文件.先判断本地这个文件是否存在,如果存在则忽略,不存在则从远程服务器上下载,下载成功后本地的批次号累加1,然后使用新的批次号继续下载新文件. #!/bin/ ...

  9. Java之创建对象>3.Enforce the singleton property with a private constructor or an enum type

     1. 通过一个公开的字段来获取单例 // Singleton with public final field public class Elvis { public static final Elv ...

  10. java sm3加密算法

      java sm3加密算法实现 CreationTime--2018年7月13日09点28分 Author:Marydon 1.准备工作 所需jar包: bcprov-jdk15on-1.59.ja ...