一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Android - Android中AsyncTask異步任務(wù)使用詳細實例(一)

Android中AsyncTask異步任務(wù)使用詳細實例(一)

2021-06-21 17:40Android開發(fā)網(wǎng) Android

AsyncTask是Android提供的輕量級的異步類,可以直接繼承AsyncTask,在類中實現(xiàn)異步操作,并提供接口反饋當(dāng)前異步執(zhí)行的程度(可以通過接口實現(xiàn)UI進度更新),最后反饋執(zhí)行的結(jié)果給UI主線程,通過本文給大家介紹Android中AsyncTask異步任務(wù)使用

AsyncTaskAndroid提供的輕量級的異步類,可以直接繼承AsyncTask,在類中實現(xiàn)異步操作,并提供接口反饋當(dāng)前異步執(zhí)行的程度(可以通過接口實現(xiàn)UI進度更新),最后反饋執(zhí)行的結(jié)果給UI主線程。

使用AsyncTask最少要重寫以下兩個方法:

1、doInBackground(Params…) 后臺執(zhí)行,比較耗時的操作都可以放在這里。注意這里不能直接操作UI。此方法在后臺線程執(zhí)行,完成任務(wù)的主要工作,通常需要較長的時間。在執(zhí)行過程中可以調(diào)用publicProgress(Progress…)來更新任務(wù)的進度。

2、onPostExecute(Result) 在這里面可以使用在doInBackground 得到的結(jié)果處理操作UI。 此方法在主線程執(zhí)行,任務(wù)執(zhí)行的結(jié)果作為此方法的參數(shù)返回 。

MainActivity如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package com.example.asynctasktest;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.os.AsyncTask;
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;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button satrtButton;
private Button cancelButton;
private ProgressBar progressBar;
private TextView textView;
private DownLoaderAsyncTask downLoaderAsyncTask;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();
}
public void initView() {
satrtButton=(Button) findViewById(R.id.startButton);
cancelButton=(Button) findViewById(R.id.cancelButton);
satrtButton.setOnClickListener(new ButtonOnClickListener());
cancelButton.setOnClickListener(new ButtonOnClickListener());
progressBar=(ProgressBar) findViewById(R.id.progressBar);
textView=(TextView) findViewById(R.id.textView);
}
private class ButtonOnClickListener implements OnClickListener{
public void onClick(View v) {
switch (v.getId()) {
case R.id.startButton:
//注意:
//1 每次需new一個實例,新建的任務(wù)只能執(zhí)行一次,否則會出現(xiàn)異常
//2 異步任務(wù)的實例必須在UI線程中創(chuàng)建
//3 execute()方法必須在UI線程中調(diào)用。
downLoaderAsyncTask=new DownLoaderAsyncTask();
downLoaderAsyncTask.execute("http://www.baidu.com");
break;
case R.id.cancelButton:
//取消一個正在執(zhí)行的任務(wù),onCancelled()方法將會被調(diào)用
downLoaderAsyncTask.cancel(true);
break;
default:
break;
}
}
}
//構(gòu)造函數(shù)AsyncTask<Params, Progress, Result>參數(shù)說明:
//Params 啟動任務(wù)執(zhí)行的輸入?yún)?shù)
//Progress 后臺任務(wù)執(zhí)行的進度
//Result 后臺計算結(jié)果的類型
private class DownLoaderAsyncTask extends AsyncTask<String, Integer, String>{
//onPreExecute()方法用于在執(zhí)行異步任務(wù)前,主線程做一些準(zhǔn)備工作
@Override
protected void onPreExecute() {
super.onPreExecute();
textView.setText("調(diào)用onPreExecute()方法--->準(zhǔn)備開始執(zhí)行異步任務(wù)");
System.out.println("調(diào)用onPreExecute()方法--->準(zhǔn)備開始執(zhí)行異步任務(wù)");
}
//doInBackground()方法用于在執(zhí)行異步任務(wù),不可以更改主線程中UI
@Override
protected String doInBackground(String... params) {
System.out.println("調(diào)用doInBackground()方法--->開始執(zhí)行異步任務(wù)");
try {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(params[0]);
HttpResponse response = client.execute(get);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
long total = entity.getContentLength();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count = 0;
int length = -1;
while ((length = is.read(buffer)) != -1) {
bos.write(buffer, 0, length);
count += length;
//publishProgress()為AsyncTask類中的方法
//常在doInBackground()中調(diào)用此方法
//用于通知主線程,后臺任務(wù)的執(zhí)行情況.
//此時會觸發(fā)AsyncTask中的onProgressUpdate()方法
publishProgress((int) ((count / (float) total) * 100));
//為了演示進度,休眠1000毫秒
Thread.sleep(1000);
}
return new String(bos.toByteArray(), "UTF-8");
}
} catch (Exception e) {
return null;
}
return null;
}
//onPostExecute()方法用于異步任務(wù)執(zhí)行完成后,在主線程中執(zhí)行的操作
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Toast.makeText(getApplicationContext(), "調(diào)用onPostExecute()方法--->異步任務(wù)執(zhí)行完畢", 0).show();
//textView顯示網(wǎng)絡(luò)請求結(jié)果
textView.setText(result);
System.out.println("調(diào)用onPostExecute()方法--->異步任務(wù)執(zhí)行完畢");
}
//onProgressUpdate()方法用于更新異步執(zhí)行中,在主線程中處理異步任務(wù)的執(zhí)行信息
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
//更改進度條
progressBar.setProgress(values[0]);
//更改TextView
textView.setText("已經(jīng)加載"+values[0]+"%");
}
//onCancelled()方法用于異步任務(wù)被取消時,在主線程中執(zhí)行相關(guān)的操作
@Override
protected void onCancelled() {
super.onCancelled();
//更改進度條進度為0
progressBar.setProgress(0);
//更改TextView
textView.setText("調(diào)用onCancelled()方法--->異步任務(wù)被取消");
System.out.println("調(diào)用onCancelled()方法--->異步任務(wù)被取消");
}
}
}

main.xml如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<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:orientation="vertical" >
<Button
android:id="@+id/startButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="開始異步任務(wù)" />
<Button
android:id="@+id/cancelButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="取消異步任務(wù)" />
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="0" />
<ScrollView
android:id="@+id/scrollView"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="test test" />
</ScrollView>
</LinearLayout>

以上內(nèi)容是小編給大家介紹的Android中AsyncTask異步任務(wù)使用詳細實例(一),希望對大家有所幫助!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲AV无码乱码国产麻豆穿越 | 欧美人与禽交片在线播放 | 特级av毛片免费观看 | 2022天堂岛日产 | 亚洲欧美成人综合久久久 | 91制片厂 果冻传媒 天美传媒 | 日产乱码2021永久手机版 | 精品精品国产自在香蕉网 | 校花被扒开尿口折磨憋尿 | 蘑菇香蕉茄子绿巨人丝瓜草莓 | 日本在线你懂的 | 欧美va免费精品高清在线 | 亚洲免费视频一区 | 粗暴hd另类另类 | 日本视频二区 | 羲义嫁密着中出交尾gvg794 | 手机看片自拍 | 久久99国产综合精品AV蜜桃 | 日韩美一区二区三区 | 日本一区二区三区久久 | 2018久久精品热在线观看 | 亚洲色大成网站www久久九九 | vomoulei成人舞蹈 | 99影视在线视频免费观看 | 国产成人激情 | 午夜欧美精品久久久久久久久 | 91探花在线播放 | 小黄文污到你湿 | 精品人伦一区二区三区潘金莲 | 成人网18免费网 | 欧美成人免费观看bbb | 草草国产成人免费视频 | 国产小视频免费看 | 国内精品91久久久久 | 国产欧美va欧美va香蕉在线观 | 十大免费b2b网站 | 成人亚洲欧美日韩中文字幕 | 日韩视频在线免费观看 | 久久综合给合久久狠狠狠… | 韩国免费视频 | 久久一本综合 |