android中asynctask的使用实例

参考此blog写的非常的好http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html

MainActivity.java

 1 import android.support.v7.app.AppCompatActivity;
 2 import android.os.Bundle;
 3 import android.view.View;
 4 import android.widget.Button;
 5 import android.widget.ProgressBar;
 6 import android.widget.TextView;
 7
 8 public class MainActivity extends AppCompatActivity {
 9
10     @Override
11     protected void onCreate(Bundle savedInstanceState) {
12         super.onCreate(savedInstanceState);
13         setContentView(R.layout.activity_main);
14
15         Button button = (Button)findViewById(R.id.button_downLoad);
16         final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);
17         final TextView textView = (TextView) findViewById(R.id.textView_hello);
18         final ProgressBar progressBar2 = (ProgressBar)findViewById(R.id.progressBar2);
19
20         button.setOnClickListener(new View.OnClickListener() {
21             @Override
22             public void onClick(View v) {
23                 ProgressBarAsyncTask asyncTask = new ProgressBarAsyncTask(textView, progressBar, progressBar2);//传进去需要改变的控件
24                 asyncTask.execute(55);//传入初始参数(这里表示将从55开始计数)
25             }
26         });
27
28     }
29 }

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    tools:context=".MainActivity">

    <TextView
        android:text="Hello World!"
        android:id="@+id/textView_hello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/progressBar"
        android:layout_gravity="center_horizontal" />

    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/progressBar2"
        android:progress="100"
        android:layout_gravity="center_horizontal" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Download"
        android:id="@+id/button_downLoad"
        android:layout_gravity="center_horizontal" />

</LinearLayout>
ProgressBarAsyncTask.java
 1 package com.turtle920.tread;
 2
 3 import android.os.AsyncTask;
 4 import android.widget.ProgressBar;
 5 import android.widget.TextView;
 6
 7 public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> {
 8     /*Params 启动任务执行的输入参数,比如HTTP请求的URL。由主线程中的asyncTask.execute(55);传入
 9     Progress 后台任务执行的百分比。
10     Result 后台执行任务最终返回的结果,比如String。*/
11     private TextView textView;
12     private ProgressBar progressBar;
13     private  ProgressBar progressBar2;
14
15
16     public ProgressBarAsyncTask(TextView textView, ProgressBar progressBar, ProgressBar progressBar2) {
17         super();
18         this.textView = textView;
19         this.progressBar = progressBar;
20         this.progressBar2 = progressBar2;
21     }
22
23     /**
24      * 这里的Integer参数对应AsyncTask中的第一个参数
25      * 这里的String返回值对应AsyncTask的第三个参数
26      * 该方法并不运行在UI线程当中,主要用于异步操作,所有在该方法中不能对UI当中的空间进行设置和修改
27      * 但是可以调用publishProgress方法触发onProgressUpdate对UI进行操作
28      */
29     @Override
30     protected String doInBackground(Integer... params) {//...表示可以传若干参数
31         NetOperator netOperator = new NetOperator();
32         int i = params[0];//由主线程中的asyncTask.execute(55);传入
33         for (i = params[0]; i <= 100; i+=1) {
34             netOperator.operator();
35             publishProgress(i, 100-i);//传两个参数给onProgressUpdate
36         }
37         return "" + i + " " + params[0].intValue() + "****";//传参数给onPostExecute
38     }
39
40     /**
41      *该方法运行在UI线程当中,并且运行在UI线程当中 可以对UI空间进行设置
42      */
43     @Override
44     protected void onPreExecute() {
45         textView.setText("开始执行异步线程");
46     }
47
48     /**
49      * 这里的Intege参数对应AsyncTask中的第二个参数
50      * 在doInBackground方法当中,,每次调用publishProgress方法都会触发onProgressUpdate执行
51      * onProgressUpdate是在UI线程中执行,所有可以对UI空间进行操作
52      */
53     @Override
54     protected void onProgressUpdate(Integer... values) {//参数来自publishProgress()
55         int value = values[0];
56         int value1 = values[1];
57         progressBar.setProgress(value);
58         progressBar2.setProgress(value1);
59         textView.setText(""+value+"% "+value1);
60     }
61
62     /**
63      * 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值)
64      * 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置
65      */
66     @Override
67     protected void onPostExecute(String result) {//参数来自doInBackground() return
68         textView.setText("异步操作执行结束" + result);
69     }
70
71
72 }
NetOperator.java
 1 package com.turtle920.tread;
 2
 3 //模拟网络环境
 4 public class NetOperator {
 5
 6     public void operator(){
 7         try {
 8             //休眠
 9             Thread.sleep(10);
10         } catch (InterruptedException e) {
11             // TODO Auto-generated catch block
12             e.printStackTrace();
13         }
14     }
15
16 }
				
时间: 2024-10-26 08:55:23

android中asynctask的使用实例的相关文章

Android中AsyncTask使用具体解释

在Android中我们能够通过Thread+Handler实现多线程通信.一种经典的使用场景是:在新线程中进行耗时操作.当任务完毕后通过Handler向主线程发送Message.这样主线程的Handler在收到该Message之后就能够进行更新UI的操作.上述场景中须要分别在Thread和Handler中编写代码逻辑,为了使得代码更加统一,我们能够使用AsyncTask类. AsyncTask是Android提供的一个助手类,它对Thread和Handler进行了封装,方便我们使用. Andro

(转)详解Android中AsyncTask的使用

转载自:详解Android中AsyncTask的使用 在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时,不易对线程进行精确的控制.关于Handler的相关知识,前面也有所介绍,不清楚的朋友们可以参照一下. 为了简化操作,Android1.5提供了工具类a

Android中AsyncTask的简单用法【转】

在开发Android移动客户端的时候往往要使用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给用户带来不好的用户体验.但是在子线程中无法去操作主线程(UI 线程),在子线程中操作UI线程会出现错误.因此android提供了一个类Handler来在子线程中来更新UI线程,用发消息的机制更新UI界面,呈现给用户.这样就解决了子线程更新UI的问题.但是费时的任务操作总会启动一些匿名的子线程,太多的子线程给系统带来巨大的负担,随之带来一些性能问题.因此android提供了

android中反射技术使用实例

在计算机科学领域,反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义.反射 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性.Java 的反射机制的实现要借助于4个类:class,Constructor,Field,

详解Android中AsyncTask的使用

在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时,不易对线程进行精确的控制.关于Handler的相关知识,前面也有所介绍,不清楚的朋友们可以参照一下. 为了简化操作,Android1.5提供了工具类android.os.AsyncTask,它使创建异步任

具体解释Android中AsyncTask的使用

在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式须要为每个任务创建一个新的线程,任务完毕后通过Handler实例向UI线程发送消息,完毕界面的更新,这样的方式对于整个过程的控制比較精细,但也是有缺点的,比如代码相对臃肿,在多个任务同一时候运行时,不易对线程进行精确的控制.关于Handler的相关知识,前面也有所介绍,不清楚的朋友们能够參照一下. 为了简化操作,Android1.5提供了工具类android.os.AsyncTask,它使创建异

Android中AsyncTask的使用

AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: l  简单,快捷 l  过程可控 使用的缺点: l  在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来. 2 )Handler异步实现的原理和适用的优缺点 在Handler

【Android】Android中AsyncTask的定义和使用方法

AsyncTask介绍 Android的AsyncTask比Handler更轻量级一些,适用于简单的异步处理. 首先明确Android之所以有Handler和AsyncTask,都是为了不阻塞主线程(UI线程),且UI的更新只能在主线程中完成,因此异步处理是不可避免的. Android为了降低这个开发难度,提供了AsyncTask.AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务. AsyncTask直接继承于Object类,位置为android.os.AsyncTask.要使

[高级]详解Android中AsyncTask的使用

在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时,不易对线程进行精确的控制.关于Handler的相关知识,前面也有所介绍,不清楚的朋友们可以参照一下. 为了简化操作,Android1.5提供了工具类android.os.AsyncTask,它使创建异步任