ANDROID_MARS学习笔记_S04_002_用AsyncTask实现异步操作

一、简介

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

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="fill_parent"
 5     android:layout_height="fill_parent"
 6     >
 7     <TextView
 8         android:id="@+id/textViewId"
 9         android:layout_width="fill_parent"
10         android:layout_height="wrap_content"
11         android:text="AsyncTask"
12     />
13
14     <ProgressBar
15         android:id="@+id/progerssBarId"
16         android:layout_width="fill_parent"
17         android:layout_height="wrap_content"
18         style="@android:style/Widget.ProgressBar.Horizontal"
19         android:max="100"/>
20     <Button
21         android:id="@+id/buttonId"
22         android:layout_width="fill_parent"
23         android:layout_height="wrap_content"
24         android:text="开始异步操作"
25     />
26     <Button
27         android:id="@+id/printButtonId"
28         android:layout_width="fill_parent"
29         android:layout_height="wrap_content"
30         android:text="打印字符串"
31     />
32 </LinearLayout>

2.java
(1)MainActivity.java

 1 package com.async;
 2
 3 import android.app.Activity;
 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 import android.widget.TextView;
10
11 public class MainActivity extends Activity {
12
13     private Button button = null;
14     private Button printButton = null;
15     private ProgressBar progressBar = null;
16     private TextView textView = null;
17
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22
23         button = (Button)findViewById(R.id.buttonId);
24         printButton = (Button)findViewById(R.id.printButtonId);
25         progressBar = (ProgressBar)findViewById(R.id.progerssBarId);
26         textView = (TextView)findViewById(R.id.textViewId);
27
28         button.setOnClickListener(new OnClickListener() {
29             @Override
30             public void onClick(View v) {
31                 ProgressBarAsyncTask progressBarAsyncTask = new ProgressBarAsyncTask(textView, progressBar);
32                 //调用AsyncTask的excuet方法会在新线程中执行
33                 progressBarAsyncTask.execute(1000);//参数用来给onPostExecute作测试用
34             }
35         });
36
37         printButton.setOnClickListener(new OnClickListener() {
38             @Override
39             public void onClick(View v) {
40                 System.out.println("printButton------->");
41             }
42         });
43     }
44 }

(2)ProgressBarAsyncTask.java

 1 package com.async;
 2
 3 import android.os.AsyncTask;
 4 import android.widget.ProgressBar;
 5 import android.widget.TextView;
 6
 7 //生成该类的对象,并调用其execute方法之后
 8 //首先执行的的onPreExecute方法
 9 //其次是执行doInBackground方法
10 //AsyncTask<Integer, Integer, String>三个泛形参数的作用为
11 //(1)Integer:指定doInBackground()的参数类型为Integer
12 //(2)Integer:指定onProgressUpdate()的参数类型为Integer
13 //(3)String:指定doInBackground()的返回类型及onPostExecute()的参数类型为String
14 public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> {
15
16     private TextView textView = null;
17     private ProgressBar progressBar = null;
18
19     public ProgressBarAsyncTask(TextView textView, ProgressBar progressBar) {
20         super();
21         this.textView = textView;
22         this.progressBar = progressBar;
23     }
24
25     //该方法并不运行在UI线程当中,所以在该方法当中,不能对UI当中的控件进行设置和修改
26     //主要用于进行异步操作。
27     @Override
28     protected String doInBackground(Integer... params) {
29         NetOperator netOperator = new NetOperator();
30         int i = 0;
31         for(i = 10 ; i <= 100 ; i+=10) {
32             netOperator.operate();
33             //用于发布更新消息
34             publishProgress(i);
35         }
36         return i + params[0].intValue() + "";
37     }
38
39     //该方法运行在UI线程当中,主要用于进行异步操作之前的UI准备工作
40     @Override
41     protected void onPreExecute() {
42         textView.setText("开始执行异步操作");
43     }
44
45     //在doInBackground方法执行结束之后再运行,并且运行在UI线程当中。
46     //主要用于将异步任务执行的结果展示给客户
47     @Override
48     protected void onPostExecute(String result) {
49         textView.setText("异步操作执行结束" + result);
50     }
51
52     //在doInBackground方法当中,每次调用publishProgress()方法之后,都会触发该方法
53     //用于在异步任务执行的过程当中,对用户进行提示,例如控制进度条等
54     @Override
55     protected void onProgressUpdate(Integer... values) {
56         int value = values[0];
57         progressBar.setProgress(value);
58     }
59
60
61 }

(3)NetOperator.java

 1 package com.async;
 2
 3 //模拟网络操作
 4 public class NetOperator {
 5
 6     public void operate() {
 7         try {
 8             Thread.sleep(1000);
 9         } catch (InterruptedException e) {
10             e.printStackTrace();
11         }
12     }
13 }
时间: 2024-10-08 09:46:20

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

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

通常情况下,我们要实现异步操作,也就是在子线程进行耗时操作比如下载或者加载图片等,然后在UI(主)线程中更新UI,使用的是Handler和Message来进行异步的实现,但是,谷歌官方在Android系统其实对这种方法进行了封装,这就是AsyncTask. Handler和Message的使用:http://www.cnblogs.com/Fndroid/p/5098405.html 使用AsyncTask,必须要新建一个类,这个类继承自AsyncTask并且制定传入参数类型.描述过程类型以及返

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

一.代码流程 1.MainActivity会开启PrepareRequestTokenActivity 2.PrepareRequestTokenActivity会根据配置文件的CONSUMER_KEY.CONSUMER_SECRET生成consumer 根据REQUEST_URL.ACCESS_URL.AUTHORIZE_URL生成provider,然后开启OAuthRequestTokenTask,执行异步操作,访问腾讯网络 3.在OAuthRequestTokenTask的doInBack

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

PS:今天搞了一下如何实现音频播放...结果被坑了,看书上写的代码是挺简单的,但是有个函数就是死活没看懂,这真是受不了...最后才弄明白,原来是一个实现异步任务的一个类...这个类使用java.util.concurrent这个高效框架来管理线程以及任务的执行...可以解决匿名线程存在的问题... 学习内容: 1.理解AsyncTask 2.如何实现音频播放... 1.AsyncTask   AsyncTask的特点就是实现一个任务在另一个线程内执行,而不是在主函数中进行执行,这样就不会导致主线

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

一.代码 1.xml(1)activity_main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="

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

一.代码流程 1.组织好sign-post需要的token,secrect 2.组织好发微博需要的信息 3.用sign-post进行签名 4.把签名结果从header中拿出来,转成entity,用httpclient以post的形式发送微博 二.简介 三.代码1.xml(1)activity_main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android

ANDROID_MARS学习笔记_S03_007_GoogleMap1

一.简介 二.代码1.xml(1)main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fi

ANDROID_MARS学习笔记_S02_012_ANIMATION_利用AnimationListener在动画结束时删除或添加组件

一.代码 1.xml(1)activity_main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:id="@+id/layoutId" 4 android:orientation="

ANDROID_MARS学习笔记_S01原始版_013_广播机制二

一.代码1.xml(1)main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_pa

ANDROID_MARS学习笔记_S01原始版_012_广播机制一

一.简介 二.代码1.xml(1)activity_main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width