android AsyncTask实例

技术分享

.java

 1 package com.example.activitydemoay;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.AsyncTask;
 6 import android.os.Bundle;
 7 import android.view.View;
 8 import android.widget.Button;
 9 import android.widget.ProgressBar;
10 import android.widget.TextView;
11 
12 public class MainActivity extends Activity {
13 
14     Button download;
15     ProgressBar pb;
16     TextView tv;
17 
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22 
23         pb = (ProgressBar) findViewById(R.id.pb);
24         tv = (TextView) findViewById(R.id.tv);
25 
26         download = (Button) findViewById(R.id.download);
27         download.setOnClickListener(new View.OnClickListener() {
28             @Override
29             public void onClick(View v) {
30                 DownloadTask dTask = new DownloadTask();
31                 dTask.execute(100);
32             }
33         });
34     }
35 
36     class DownloadTask extends AsyncTask<Integer, Integer, String> {
37         // 后面尖括号内分别是参数(例子里是线程休息时间),进度(publishProgress用到),返回值 类型
38 
39         @Override
40         protected void onPreExecute() {
41             // 第一个执行方法
42             super.onPreExecute();
43         }
44 
45         @Override
46         protected String doInBackground(Integer... params) {
47             // 第二个执行方法,onPreExecute()执行完后执行
48             for (int i = 0; i <= 100; i++) {
49                 pb.setProgress(i);
50                 publishProgress(i);
51                 try {
52                     Thread.sleep(params[0]);
53                 } catch (InterruptedException e) {
54                     e.printStackTrace();
55                 }
56             }
57             return "执行完毕";
58         }
59 
60         @Override
61         protected void onProgressUpdate(Integer... progress) {
62             // 这个函数在doInBackground调用publishProgress时触发,虽然调用时只有一个参数
63             // 但是这里取到的是一个数组,所以要用progesss[0]来取值
64             // 第n个参数就用progress[n]来取值
65             tv.setText(progress[0] + "%");
66             super.onProgressUpdate(progress);
67         }
68 
69         @Override
70         protected void onPostExecute(String result) {
71             // doInBackground返回时触发,换句话说,就是doInBackground执行完后触发
72             // 这里的result就是上面doInBackground执行后的返回值,所以这里是"执行完毕"
73             setTitle(result);
74             Intent intent = new Intent();
75             // Intent传递参数
76 //            intent.putExtra("TEST", "123");
77 //            intent.setClass(MainActivity.this, MainActivityB.class);
78 //            MainActivity.this.startActivity(intent);
79             super.onPostExecute(result);
80         }
81 
82     }
83 
84 }

.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:layout_width="fill_parent"   
 9        android:layout_height="wrap_content"   
10        android:text="Hello , Welcome to Andy‘s Blog!"/>  
11     <Button  
12        android:id="@+id/download"  
13        android:layout_width="fill_parent"  
14        android:layout_height="wrap_content"  
15        android:text="Download"/>  
16     <TextView    
17        android:id="@+id/tv"  
18        android:layout_width="fill_parent"   
19        android:layout_height="wrap_content"   
20        android:text="当前进度显示"/>  
21     <ProgressBar  
22        android:id="@+id/pb"  
23        android:layout_width="fill_parent"  
24        android:layout_height="wrap_content"  
25        style="?android:attr/progressBarStyleHorizontal"/>  
26 </LinearLayout>  

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。