一、简介

二、代码
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. 【转】性能测试设计和LR原理的探讨

    做了4个迭代的性能测试, 在没有需求的情况下步步艰辛,把代码和框架独立开发从0到一万多行代码的测试工具(脚本),作为性能测试工具佼佼者Lr,我时而拿他作参考,山寨了它很多 东西,同时带有很多疑问对它实 ...

  2. react 学习之十月之思

    学习新技术,最怕的莫过于自己抱着莫大的决心去学习,然发现没有学到东西,这是很可怕的事情,但是能坚持下去,一点一点的消化知识点,并且去理解它是什么?有什么用?该怎么去用?使用的时候需要注意些什么呢? 这 ...

  3. WebUploader——一个页面多个实例上传图片

    WebUploader官方例子看的不是很清楚,自己也是费了点劲自己写了一下. 需求:一个单页需要多个实例来上传,一次可上传多张 条件:后台接收C# 首先:引入webuploader     webup ...

  4. android 6.0特性翻译 --渣渣

    所有关于Android 6.0 棉花糖的知识 上下文帮助 1.现在按压:不需要离开你正在运行的app或者访问的网站就可 获取帮助,仅仅触摸和按下Home按钮.(长按Home键,可以在 android ...

  5. ACM——A + B Problem (2)

    A + B Problem (2) 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte总提交:2600            测试通过:137 ...

  6. UML类图细节

    类图表述的是类和类之间的关系,是前期用来推演代码设计,后期用来优化代码的结构,寻找设计不合理之处.网上解释类图和类图的画法,往往表述的十分晦涩,或者例子呆板,很难具体的操作. 类图一般在详细设计过程中 ...

  7. ora01033 oracle正在初始化或关闭

    toad连数据库报错: ORA-01033: ORACLE initialization or shutdown in progress 解决方法: 1)开始-运行-cmd 2)命令行中输入SQLPL ...

  8. requirejs实践一 加载JavaScript文件

    首先,目录如下(根目录有一个index.html文件.有一个scripts文件夹): scripts文件夹有如下的文件 以下是index.html代码 <!DOCTYPE html> &l ...

  9. docker私有仓库

    1.docker pull registry 2.sudo docker run -d -p 5000:5000 registry 默认情况下,会将仓库存放于容器内的/tmp/registry目录下, ...

  10. 在 Linux 命令行中使用和执行 PHP 代码

    PHP是一个开源服务器端脚本语言,最初这三个字母代表的是“Personal Home Page”,而现在则代表的是“PHP:Hypertext Preprocessor”,它是个递归首字母缩写.它是一 ...