亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統(tǒng) > Android > 正文

asynctask的用法詳解

2020-04-11 12:42:50
字體:
供稿:網(wǎng)友

在開發(fā)Android應用時必須遵守單線程模型的原則: Android UI操作并不是線程安全的并且這些操作必須在UI線程中執(zhí)行。在單線程模型中始終要記住兩條法則:
1. 不要阻塞UI線程
2. 確保只在UI線程中訪問Android UI工具包
當一個程序第一次啟動時,Android會同時啟動一個對應的主線程(Main Thread),主線程主要負責處理與UI相關(guān)的事件,如:用戶的按鍵事件,用戶接觸屏幕的事件以及屏幕繪圖事件,并把相關(guān)的事件分發(fā)到對應的組件進行處理。所以主線程通常又被叫做UI線程。
比如說從網(wǎng)上獲取一個網(wǎng)頁,在一個TextView中將其源代碼顯示出來,這種涉及到網(wǎng)絡操作的程序一般都是需要開一個線程完成網(wǎng)絡訪問,但是在獲得頁面源碼后,是不能直接在網(wǎng)絡操作線程中調(diào)用TextView.setText()的.因為其他線程中是不能直接訪問主UI線程成員 。

android提供了幾種在其他線程中訪問UI線程的方法。
Activity.runOnUiThread( Runnable )
View.post( Runnable )
View.postDelayed( Runnable, long )
Hanlder
這些類或方法同樣會使你的代碼很復雜很難理解。然而當你需要實現(xiàn)一些很復雜的操作并需要頻繁地更新UI時這會變得更糟糕。

為了解決這個問題,Android 1.5提供了一個工具類:AsyncTask,它使創(chuàng)建需要與用戶界面交互的長時間運行的任務變得更簡單。相對來說AsyncTask更輕量級一些,適用于簡單的異步處理,不需要借助線程和Handler即可實現(xiàn)。
AsyncTask是抽象類.AsyncTask定義了三種泛型類型 Params,Progress和Result。
Params 啟動任務執(zhí)行的輸入?yún)?shù),比如HTTP請求的URL。
Progress 后臺任務執(zhí)行的百分比。
Result 后臺執(zhí)行任務最終返回的結(jié)果,比如String。
AsyncTask的執(zhí)行分為四個步驟,每一步都對應一個回調(diào)方法,這些方法不應該由應用程序調(diào)用,開發(fā)者需要做的就是實現(xiàn)這些方法。
1) 子類化AsyncTask
2) 實現(xiàn)AsyncTask中定義的下面一個或幾個方法
onPreExecute(), 該方法將在執(zhí)行實際的后臺操作前被UI thread調(diào)用??梢栽谠摲椒ㄖ凶鲆恍蕚涔ぷ?,如在界面上顯示一個進度條。
doInBackground(Params...), 將在onPreExecute 方法執(zhí)行后馬上執(zhí)行,該方法運行在后臺線程中。這里將主要負責執(zhí)行那些很耗時的后臺計算工作。可以調(diào)用 publishProgress方法來更新實時的任務進度。該方法是抽象方法,子類必須實現(xiàn)。
onProgressUpdate(Progress...),在publishProgress方法被調(diào)用后,UI thread將調(diào)用這個方法從而在界面上展示任務的進展情況,例如通過一個進度條進行展示。
onPostExecute(Result), 在doInBackground 執(zhí)行完成后,onPostExecute 方法將被UI thread調(diào)用,后臺的計算結(jié)果將通過該方法傳遞到UI thread.

為了正確的使用AsyncTask類,以下是幾條必須遵守的準則:
1) Task的實例必須在UI thread中創(chuàng)建
2) execute方法必須在UI thread中調(diào)用
3) 不要手動的調(diào)用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)這幾個方法
4) 該task只能被執(zhí)行一次,否則多次調(diào)用時將會出現(xiàn)異常
doInBackground方法和onPostExecute的參數(shù)必須對應,這兩個參數(shù)在AsyncTask聲明的泛型參數(shù)列表中指定,第一個為doInBackground接受的參數(shù),第二個為顯示進度的參數(shù),第第三個為doInBackground返回和onPostExecute傳入的參數(shù)。

從網(wǎng)上獲取一個網(wǎng)頁,在一個TextView中將其源代碼顯示出來

復制代碼 代碼如下:

package test.list;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
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.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class NetworkActivity extends Activity{
private TextView message;
private Button open;
private EditText url;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.network);
message= (TextView) findViewById(R.id.message);
url= (EditText) findViewById(R.id.url);
open= (Button) findViewById(R.id.open);
open.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
connect();
}
});

}

private void connect() {
PageTask task = new PageTask(this);
task.execute(url.getText().toString());
}


class PageTask extends AsyncTask<String, Integer, String> {
// 可變長的輸入?yún)?shù),與AsyncTask.exucute()對應
ProgressDialog pdialog;
public PageTask(Context context){
pdialog = new ProgressDialog(context, 0);
pdialog.setButton("cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int i) {
dialog.cancel();
}
});
pdialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
public void onCancel(DialogInterface dialog) {
finish();
}
});
pdialog.setCancelable(true);
pdialog.setMax(100);
pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pdialog.show();


}
@Override
protected String doInBackground(String... params) {

try{

HttpClient client = new DefaultHttpClient();
// params[0]代表連接的url
HttpGet get = new HttpGet(params[0]);
HttpResponse response = client.execute(get);
HttpEntity entity = response.getEntity();
long length = entity.getContentLength();
InputStream is = entity.getContent();
String s = null;
if(is != null) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();

byte[] buf = new byte[128];

int ch = -1;

int count = 0;

while((ch = is.read(buf)) != -1) {

baos.write(buf, 0, ch);

count += ch;

if(length > 0) {
// 如果知道響應的長度,調(diào)用publishProgress()更新進度
publishProgress((int) ((count / (float) length) * 100));
}

// 讓線程休眠100ms
Thread.sleep(100);
}
s = new String(baos.toByteArray()); }
// 返回結(jié)果
return s;
} catch(Exception e) {
e.printStackTrace();

}

return null;

}

@Override
protected void onCancelled() {
super.onCancelled();
}

@Override
protected void onPostExecute(String result) {
// 返回HTML頁面的內(nèi)容
message.setText(result);
pdialog.dismiss();
}

@Override
protected void onPreExecute() {
// 任務啟動,可以在這里顯示一個對話框,這里簡單處理
message.setText(R.string.task_started);
}

@Override
protected void onProgressUpdate(Integer... values) {
// 更新進度
System.out.println(""+values[0]);
message.setText(""+values[0]);
pdialog.setProgress(values[0]);
}

}

}

最后需要說明AsyncTask不能完全取代線程,在一些邏輯較為復雜或者需要在后臺反復執(zhí)行的邏輯就可能需要線程來實現(xiàn)了。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
麻豆传媒一区| www.youjizz.com在线| 国产一二区在线观看| 中文字幕免费精品一区高清| 岛国一区二区在线观看| 日本在线免费播放| 日本久久一区| 亚洲一区二区视频| 日韩中文字幕有码| 欧美日韩成人网| 亚洲一区影音先锋| 91精品国产一区二区| jizz欧美大全| 日韩精品一区二区三区色欲av| 黄色www网站| 国产精品精品国产一区二区| 欧美一级bbbbb性bbbb喷潮片| 国产精品无av码在线观看| 电影天堂久久| 美女视频免费观看网站在线| 少妇免费视频| 国产日韩精品综合网站| 久久综合色天天久久综合图片| 潘金莲一级淫片aaaaaa播放1| 亚洲少妇自拍| 日韩福利一区二区| 91在线你懂得| 麻豆成人在线| xfplay每日更新av资源在线| 欧美日韩一区二区三区四区| 久久中文字幕在线视频| 99re6这里有精品热视频| 91蝌蚪porny| 欧美精品久久一区二区三区| 日本欧美色图| 免费成人高清在线视频| 一区二区视频在线观看免费的| 超碰在线中文| 视频一区二区三区在线观看| 美女91在线| 在线观看网站黄| 日韩欧美一中文字暮专区| 亚洲最快最全在线视频| 葵司免费一区二区三区四区五区| 中文字幕亚洲精品| 国产成人精品综合网站| 亚洲综合无码一区二区| 亚洲free嫩bbb| 日本成人在线免费观看| 欧美网站大全在线观看| 永久免费无码av网站在线观看| 91人妻一区二区三区| 91在线高清| 精品丰满少妇一区二区三区| 欧美一区国产一区| 亚洲码欧美码一区二区三区| 欧美一级大片在线免费观看| 欧美高清电影在线| 欧美极品在线播放| 久久精品资源| 成人午夜激情在线| 亚洲成色999久久网站| 色呦呦在线看| 亚洲 欧美 日韩系列| 亚洲天天综合| 免费的黄色av| aaa日本高清在线播放免费观看| 精品国产综合久久| 粉嫩虎白女毛片人体| 色视频在线观看| 动漫成人在线观看| 欧美一区二区三区免费在线看| 亚洲激情77| 91丨九色丨国产| 欧美专区一区二区三区| 国产精品一二三四| 六月亚洲精品一区| 国产乱淫av麻豆国产免费| 日本在线不卡一区| 日韩欧美在线视频| 四虎成人精品永久免费av| 欧美人与牛zoz0性行为| 国产男女免费视频| 亚洲欧美日韩综合国产aⅴ| www浪潮av99com| 福利精品视频在线| 污视频在线看网站| 亚洲制服欧美另类| 国产一二三区av| 精品无码人妻一区二区免费蜜桃| 国产午夜在线视频| xxxxxhd亚洲人hd| 午夜精品一区二区三区免费视频| 亚洲午夜久久久久久久久电影院| 国产中文字幕在线| 欧美精品videos极品| 欧洲中文在线| 午夜剧场高清版免费观看| 国产成人手机视频| 精品国产免费第一区二区| 999精品视频在这里| 久久久久久久久免费看无码| 日韩一区二区av| 日韩在线一区二区三区免费视频| 国产99精品在线观看| 色哟哟免费网站| 欧美丝袜第三区| 国产精品成人自拍| 久久久久久久国产精品毛片| 亚洲视频一区在线| 99精品国产高清在线观看| 91一区二区三区在线| 国产伦精品一区二区三区免费迷| 阳光姐妹淘韩国版| 99re在线国产| 毛茸茸free性熟hd| 自拍偷拍电影| 最新热久久免费视频| 国产视频不卡一区| 久久久久久久久久电影| 久热免费在线观看| 国产一区二区日韩| 亚洲精品天堂成人片av在线播放| 欧美日韩免费高清| 久久久久狠狠高潮亚洲精品| 成人手机在线| 国产精品久久久久久久久果冻传媒| 日本日本精品二区免费| 国产亚洲精品美女久久久久久久久久| 久久国产午夜精品理论片最新版本| √8天堂资源地址中文在线| 肉丝美足丝袜一区二区三区四| 黑人无套内谢中国美女| 麻豆国产精品777777在线| av亚洲一区二区三区| 先锋影音中文字幕| 亚洲美女主播视频免费观看| 欧美第一精品| 日韩精品一卡二卡| 男人添女荫道口女人有什么感觉| 制服丝袜综合网| 99视频在线看| 久久视频在线观看| 熟妇高潮精品一区二区三区| 日韩女同互慰一区二区| 日本在线观看大片免费视频| wwww亚洲| 国产探花在线观看视频| 久久99精品网久久| 亚洲国产欧美另类| av免费观看一区二区| 国产精品1luya在线播放| 中文岛国精品亚洲一区| 2021天天操| 成人在线免费| 91小视频在线播放| 最新真实国产在线视频| 成人精品高清在线视频| 久久精品91久久久久久再现| 久久精品美女| 波多野结衣在线影院| 免费网站在线观看视频| 依依成人综合视频| 手机在线视频你懂的| 欧美破处大片在线视频| 日韩av色综合| 九色91国产| 久久国产精品久久久久| 风间由美一区二区av101| 青青草视频在线青草免费观看| 99日在线视频| 精品国产美女在线| 好看的av在线不卡观看| 国产精品永久免费在线| 日韩av一区二区三区美女毛片| 亚洲综合成人av| 国产精品成人一区二区不卡| 蜜桃av噜噜一区二区三区| 欧美午夜性春猛xxxx| 国产不卡视频在线观看| 在线免费毛片| 成人国产精品| 色妞久久福利网| 深夜福利在线视频| 特级毛片www| 日本高清不卡在线观看| 日本在线www| 成年人一级黄色片| 夜夜嗨aⅴ免费视频| 一级片aaaa| 欧美激情亚洲另类| 免费人成黄页网站在线一区二区| 亚洲激情五月| 欧美精品与人动性物交免费看| 激情六月丁香| 在线视频手机国产| 一级性生活毛片| 一区二区三区电影大全| 免费无码不卡视频在线观看| 在线国产一区二区三区| 午夜a成v人精品| av在线不卡免费观看| 绿色成人影院| 黄漫在线播放| 91小视频xxxx网站在线| 69av一区二区三区| 国产二区视频在线| 男人天堂亚洲天堂| 美日韩一区二区| 黄色免费观看视频网站| 亚洲国产综合自拍| 欧洲精品久久久久毛片完整版| 久青青在线观看视频国产| 小小女视频网站色琼网站| 91传媒理伦片在线观看| 日韩av在线影院| 美女诱惑黄网站一区| 欧美美女在线直播| 澳门黄色一级片| 亚洲视频狠狠| 裸模一区二区三区免费| 欧美一二区在线观看| 女生裸体视频一区二区三区| 国产精品国产精品国产专区| 97在线看免费观看视频在线观看| 国产成人免费视频app| 国产美女极度色诱视频www| 少妇高潮在线观看| 中文在线免费二区三区| 紧身裙女教师波多野结衣| 中文字幕的久久| 海角国产乱辈乱精品视频| 亚洲人成影视在线观看| 国产精品的网站| 麻豆网站免费在线观看| 亚洲AV无码一区二区三区性| 福利小视频在线| 成都免费高清电影| 国产肉丝袜一区二区| 黄色免费看网站| av无码久久久久久不卡网站| 国产自产在线视频| 欧美视频久久| 99九九精品视频| 麻豆免费在线视频| 中文字幕乱码一区| 中文欧美日本在线资源| 亚洲精品7777xxxx青睐| 欧美精品一级片| 国产一区二区毛片| 人操人爱免费视频| 国产精品免费久久久久| 日日摸夜夜添夜夜添精品视频| av色图一区| 91麻豆视频网站| 2017亚洲天堂| 日本一区二区免费在线观看| 日韩中文字幕av在线| 亚洲日本一区二区三区在线| va天堂va亚洲va影视| 午夜国产精品一区| 91久久精品国产91性色| 中国xxxx性xxxx产国| 成人性视频欧美一区二区三区| 亚洲欧美高清| 亚洲第一大网站| 国产精品视频网| 日韩二区在线观看| 一区二区欧美亚洲| 日本人添下边视频免费| 欧美成人a∨高清免费观看| 制服.丝袜.亚洲.中文.综合懂| 国产精品一区二区av日韩在线| 欧美电影免费观看高清完整| 这里只有久久精品视频| 欧美激情精品久久久久久免费| 亚洲精品无码国产| 日韩日本欧美亚洲| 国内在线精品| 亚洲成va人在线观看| 一本一道dvd在线观看免费视频| 91精品视频大全| 99免费视频| 久久久久久久久一| 国产一区二区三区在线| 精品人妻一区二区免费| 欧美激情综合色综合啪啪五月| 国产成人久久婷婷精品流白浆| 久久精品这里只有精品| 6080日韩午夜伦伦午夜伦| 国产精品自偷自拍| 福利视频免费在线观看| 精品久久久久久亚洲| 精品无码国模私拍视频| 日本精品在线观看| 亚洲男人天堂网站| 欧美xxxx性猛交bbbb| 男人天堂avav| 欧美xxxx14xxxxx性爽| 嫩草精品影院| 成人免费观看a| 久久久精品在线观看| 日产国产欧美视频一区精品| 中文字幕在线久热精品| 操日韩av在线电影| 国产美女久久久| 亚洲精品小区久久久久久| 欧美一区二区三区四区夜夜大片| 尤物一区二区三区| 国产精品视频一区二区三区四蜜臂| 欧美一区二区三区不卡视频| 综合色中文字幕| 夜夜躁狠狠躁日日躁2021日韩| 少妇黄色一级片| aaa毛片在线观看| 在线香蕉视频| 亚洲性猛交xxxx乱大交| 欧美日韩精品在线观看视频| 欧美xxxx做受欧美| 日本在线免费观看| www.av天天| 欧美性xxxx极品hd满灌| x99av成人免费| 亚洲黄色av网站| 日韩三级视频在线播放| 91.麻豆视频| 粉嫩小泬无遮挡久久久久久| 轻点好疼好大好爽视频|