Android开发之AsyncTask的使用
Android API 3时引进了AsyncTask,也叫异步任务。使用它可以很方便的更新主线程中的UI,使用它比Handler、Thread更简单。由于AsyncTask是抽象类,要使用它首先要创建子类继承它。创建子类时需要三个泛型参数
Params 调用execute时传入的参数,
Progress 需要显示的进度信息
Result 任务执行完毕后doInBackground的返回值
看下使用AsyncTask控制进度条的效果
代码实现
- package com.example.asynctaskdemo;
- import android.app.Activity;
- import android.os.AsyncTask;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.ProgressBar;
- /**
- * AsyncTask的简单使用
- *
- * @author Administrator
- *
- */
- public class MainActivity extends Activity {
- private ProgressBar pro = null;
- private Button start = null;
- private Button stop = null;
- private boolean isExe = false;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- pro = (ProgressBar) findViewById(R.id.progress);
- start = (Button) findViewById(R.id.start);
- stop = (Button) findViewById(R.id.stop);
- final UpdatePro updatePro = new UpdatePro();
- // 开始任务
- start.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- if (!isExe) {
- // 一个任务只能被执行一次,否则会报异常
- updatePro.execute();
- isExe = true;
- }
- }
- });
- // 结束任务
- stop.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- if (isExe) {
- updatePro.cancel(true);
- }
- }
- });
- }
- /**
- * 更新UI线程
- *
- * @author Administrator
- *
- */
- class UpdatePro extends AsyncTask<Void, Integer, Boolean> {
- private int downloadPercent = 0;
- /**
- * 核心的操作
- */
- @Override
- protected Boolean doInBackground(Void... params) {
- // TODO Auto-generated method stub
- try {
- while (true) {
- downloadPercent = downloadPercent + 10;
- // 把数据传给onProgressUpdate更新UI
- publishProgress(downloadPercent);
- if (downloadPercent >= 300) {
- //downloadPercent = 0;
- break;
- }
- System.out.println("----- downloadPercent = "
- + downloadPercent);
- Thread.sleep(10000);
- }
- } catch (Exception e) {
- return false;
- }
- return true;
- }
- /**
- * 获取doInBackground返回的结果
- */
- @Override
- protected void onPostExecute(Boolean result) {
- // TODO Auto-generated method stub
- System.out.println("--------------onPostExecute " + result);
- super.onPostExecute(result);
- }
- /**
- * 最先执行 初始化工作
- */
- @Override
- protected void onPreExecute() {
- // TODO Auto-generated method stub
- System.out.println("--------------onPreExecute");
- pro.setProgress(0);
- super.onPreExecute();
- }
- /**
- * 得到publishProgress传入的值,更新UI
- */
- @Override
- protected void onProgressUpdate(Integer... values) {
- // TODO Auto-generated method stub
- System.out.println("--------------onProgressUpdate " + values[0]);
- pro.setProgress(values[0]);
- super.onProgressUpdate(values);
- }
- }
- }
Demo下载:http://files.cnblogs.com/android100/AsyncTaskDemo.zip
Android开发之AsyncTask的使用的更多相关文章
- Android开发之AsyncTask示例Demo
今天做了一个AsyncTask的小Demo,内含注释,通过此Demo,可以对AsyncTask有一个详细的了解 已经将项目上传到了GitHub上(程序有一个小bug,在第一次提交有说明,有解决方法请留 ...
- Android开发之InstanceState详解
Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...
- Android开发之InstanceState详解(转)---利用其保存Activity状态
Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...
- Android开发之Java集合类性能分析
对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...
- Android开发之Git配置
Android开发之Git配置 1.首先git配置: 输入命令: git config --global user.name "xxx.xx" git config --globa ...
- 【Android UI】Android开发之View的几种布局方式及实践
引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...
- Android开发之旅: Intents和Intent Filters(理论部分)
引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...
- Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...
- Android开发之Java必备基础
Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...
随机推荐
- Dockerfile 指令 ADD 和 COPY介绍
一.ADD指令 ADD指令的功能是将主机构建环境(上下文)目录中的文件和目录.以及一个URL标记的文件 拷贝到镜像中. 其格式是: ADD 源路径 目标路径 如: #test FROM ubunt ...
- Python学习笔记_04:Django框架简介
目录 1 什么是Django? 2 Django框架的开发环境搭建 3 Django操作MySql数据库简介 4 功能强大的Django管理工具应用 1 什么是Django? Django是应用于We ...
- markdown 常用语法格式
1.示例1 http://mahua.jser.me/ 2.示例2 https://www.zybuluo.com/mdeditor?url=https%3A%2F%2Fwww.zybuluo.com ...
- 腾讯云ubuntu安装Mysql并配置远程访问
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6378914.html 一:修改SSH配置 输入 su 进入root模式.修改ssh配置: sudo vi /e ...
- linux 端口转发
一 从一台机到另一台机端口转发 启用网卡转发功能#echo 1 > /proc/sys/net/ipv4/ip_forward 举例:从192.168.0.132:21521(新端口)访问192 ...
- python之模块py_compile用法(将py文件转换为pyc文件)
# -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块py_compile用法(将py文件转换为pyc文件):二进制文件,是由py文件经过编译后 ...
- uitableview做九宫格
1:创建实体 #import <Foundation/Foundation.h> @interface Shop : NSObject @property (nonatomic, copy ...
- 比较JSF、Spring MVC、Stripes、Struts 2、Tapestry、Wicket
2009-06-23 Java Web层框架--JSF.Spring MVC.Stripes.Struts 2.Tapestry和Wicket他们各自的优点和缺点: JSF 优点: ◆Java EE标 ...
- LLVM和clang
LLVM编译器架构 LLVM项目是一套工具的集合,它包括模块化.可复用的编译器及一些列工具链技术. LLVM最开始是Low Level Virtual Machine的简称,但现在它并不是传统意义上的 ...
- Python装饰器几个有用又好玩的例子
装饰器是一种巧妙简洁的魔术,类似于Java中的面向切面编程,我们可以再函数执行前.执行后.抛出异常时做一些工作.利用装饰器,我们可以抽象出一些共同的逻辑,简化代码.而简化代码的同时,就是在增加代码鲁棒 ...