一、简介

二、代码
1.xml
(1)activity_main.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/textViewId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="AsyncTask"
/> <ProgressBar
android:id="@+id/progerssBarId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"
android:max="100"/>
<Button
android:id="@+id/buttonId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="开始异步操作"
/>
<Button
android:id="@+id/printButtonId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="打印字符串"
/>
</LinearLayout>

2.java
(1)MainActivity.java

 package com.async;

 import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView; public class MainActivity extends Activity { private Button button = null;
private Button printButton = null;
private ProgressBar progressBar = null;
private TextView textView = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.buttonId);
printButton = (Button)findViewById(R.id.printButtonId);
progressBar = (ProgressBar)findViewById(R.id.progerssBarId);
textView = (TextView)findViewById(R.id.textViewId); button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ProgressBarAsyncTask progressBarAsyncTask = new ProgressBarAsyncTask(textView, progressBar);
//调用AsyncTask的excuet方法会在新线程中执行
progressBarAsyncTask.execute(1000);//参数用来给onPostExecute作测试用
}
}); printButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("printButton------->");
}
});
}
}

(2)ProgressBarAsyncTask.java

 package com.async;

 import android.os.AsyncTask;
import android.widget.ProgressBar;
import android.widget.TextView; //生成该类的对象,并调用其execute方法之后
//首先执行的的onPreExecute方法
//其次是执行doInBackground方法
//AsyncTask<Integer, Integer, String>三个泛形参数的作用为
//(1)Integer:指定doInBackground()的参数类型为Integer
//(2)Integer:指定onProgressUpdate()的参数类型为Integer
//(3)String:指定doInBackground()的返回类型及onPostExecute()的参数类型为String
public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> { private TextView textView = null;
private ProgressBar progressBar = null; public ProgressBarAsyncTask(TextView textView, ProgressBar progressBar) {
super();
this.textView = textView;
this.progressBar = progressBar;
} //该方法并不运行在UI线程当中,所以在该方法当中,不能对UI当中的控件进行设置和修改
//主要用于进行异步操作。
@Override
protected String doInBackground(Integer... params) {
NetOperator netOperator = new NetOperator();
int i = 0;
for(i = 10 ; i <= 100 ; i+=10) {
netOperator.operate();
//用于发布更新消息
publishProgress(i);
}
return i + params[0].intValue() + "";
} //该方法运行在UI线程当中,主要用于进行异步操作之前的UI准备工作
@Override
protected void onPreExecute() {
textView.setText("开始执行异步操作");
} //在doInBackground方法执行结束之后再运行,并且运行在UI线程当中。
//主要用于将异步任务执行的结果展示给客户
@Override
protected void onPostExecute(String result) {
textView.setText("异步操作执行结束" + result);
} //在doInBackground方法当中,每次调用publishProgress()方法之后,都会触发该方法
//用于在异步任务执行的过程当中,对用户进行提示,例如控制进度条等
@Override
protected void onProgressUpdate(Integer... values) {
int value = values[0];
progressBar.setProgress(value);
} }

(3)NetOperator.java

 package com.async;

 //模拟网络操作
public class NetOperator { public void operate() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

ANDROID_MARS学习笔记_S04_002_用AsyncTask实现异步操作的更多相关文章

  1. ANDROID_MARS学习笔记_S03_005_Geocoder、AsyncTask

    一.代码1.xml(1)AndroidManifest.xml <uses-permission android:name="android.permission.ACCESS_FIN ...

  2. Android开发学习之路-使用AsyncTask进行异步操作

    通常情况下,我们要实现异步操作,也就是在子线程进行耗时操作比如下载或者加载图片等,然后在UI(主)线程中更新UI,使用的是Handler和Message来进行异步的实现,但是,谷歌官方在Android ...

  3. Android 学习笔记多媒体技术之 AsyncTask+实现音频播放...

    PS:今天搞了一下如何实现音频播放...结果被坑了,看书上写的代码是挺简单的,但是有个函数就是死活没看懂,这真是受不了...最后才弄明白,原来是一个实现异步任务的一个类...这个类使用java.uti ...

  4. ANDROID_MARS学习笔记_S04_006_用获取access_token,access_token_secrect

    一.代码流程 1.MainActivity会开启PrepareRequestTokenActivity 2.PrepareRequestTokenActivity会根据配置文件的CONSUMER_KE ...

  5. ES6学习笔记七:生成器与异步操作

    一:Generator Generator 函数是一个普通函数,但是有两个特征.一是,function关键字与函数名之间有一个星号:二是,函数体内部使用yield表达式,输出不同的内部状态. 执行 G ...

  6. ANDROID_MARS学习笔记_S04_005_用sing-post向腾讯微博发一条信息

    一.代码流程 1.组织好sign-post需要的token,secrect 2.组织好发微博需要的信息 3.用sign-post进行签名 4.把签名结果从header中拿出来,转成entity,用ht ...

  7. ANDROID_MARS学习笔记_S04_004_用HTTPCLENT发带参数的get和post请求

    一.代码 1.xml(1)activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/r ...

  8. ANDROID_MARS学习笔记_S04_001_OAUTH获取request_token

    一.代码 1.xml(1)main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLay ...

  9. ES6学习笔记(四):异步操作

    Promise Promise三种状态 pending.resolved.rejected 使用语法 var promis = new Promise(function(resolve,reject) ...

随机推荐

  1. SQL Server内连接、外连接、交叉连接

    前言 在数据库查询中,我们常常会用到的表连接查询,而我自己在工作中也是时常用这些表连接查询.而就在刚刚我却还没有搞清楚数据库表连接到底有哪几种, 这几种表连接查询方式又有什么区别,实属惭愧!借以此文以 ...

  2. 深入分析 Java 中的中文编码问题 (文章来自网络)

    许令波,developerWorks 中国网站最佳作者,现就职于淘宝网,是一名 Java 开发工程师.对大型互联网架构设计颇感兴趣,喜欢钻研开源框架的设计原理.有时间将学到的知识整理成文章,也喜欢记录 ...

  3. Android应用程序消息处理机制笔记

    看老罗的Android源码情景分析学习的时候,边抄边理解再总结.希望能为面试提供点帮助吧. 1.Android应用程序是通过消息来驱动,Android应用程序每一个线程在启动时,都可以首先在内部创建一 ...

  4. SQL Server调优系列进阶篇 - 查询优化器的运行方式

    前言 前面我们的几篇文章介绍了一系列关于运算符的基础介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符. ...

  5. Android出现Read-only file system 解决方法

    操作AVD文件系统上的文件时遇到"... Read-only file system". 解决办法: 将AVD sdcard挂载为读写权限: 在doc下执行:adb -s emul ...

  6. mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法

    补充:正常情况下,建议数据库备份最好用工具进行备份,通过拷贝数据库表进行数据迁移,不同的环境会出现各种不同的意外问题. 背景:今天在整理一个网站的时候,操作系统由于系统自动更新导致一直出现系统蓝屏死机 ...

  7. Multiple methods named 'status' found with mismatched result, parameter type or attributes

    出现这个这个错误, 有可能是由于你直接通过一个数组的索引获取一个对象(或模型)然后直接调用这个对象(或模型)的某个方法 例如: NSString *status = [self.models[inde ...

  8. struts 模型驱动

    情景: 有一个用来处理用户的UserAction 类, 该动作类实现了 ModelDriven 接口. 当用户触发UserAction 动作时, ModelDriven 拦截器将调用相关UserAct ...

  9. 暑假集训(1)第四弹 -----Find a way(Hdu2612)

    Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Nin ...

  10. Constants in C++

    The first motivation for const seems to have been to eliminate the use of preprocessor #define for v ...