Android_AsyncTask

基本用法

繼承時(shí)為AsyncTask類指定三個(gè)泛型參數(shù)各谚,

  • Params
    在執(zhí)行AsyncTask時(shí)需要傳入的參數(shù)沛简,可用于在后臺任務(wù)中使用附帽。
  • Progress
    后臺任務(wù)執(zhí)行時(shí)罢杉,如果需要在界面上顯示當(dāng)前的進(jìn)度粪小,則使用這里指定的泛型作為進(jìn)度單位大磺。
  • Result
    當(dāng)任務(wù)執(zhí)行完畢后,如果需要對結(jié)果進(jìn)行返回探膊,則使用這里指定的泛型作為返回值類型杠愧。

實(shí)現(xiàn)一個(gè)顯示圖片的功能

public class ShowPicTask extends AsyncTask<String, Integer, Bitmap> {

private ImageView mImageView;
private ProgressBar mProgressBar;

public ShowPicTask(ImageView imageView, ProgressBar progressBar) {
    mImageView = imageView;
    mProgressBar = progressBar;
}

// 在后臺任務(wù)開始執(zhí)行之前調(diào)用,用于進(jìn)行一些界面上的初始化操作逞壁,如顯示一個(gè)進(jìn)度條對話框
@Override
protected void onPreExecute() {
    mProgressBar.setProgress(0);
}

// 子線程中運(yùn)行流济,任務(wù)完成會return執(zhí)行結(jié)果
@Override
protected Bitmap doInBackground(String... strings) {
    Bitmap bitmap = null;
    try {
        URL imageUrl = new URL(strings[0]);
        HttpURLConnection conn = (HttpURLConnection) imageUrl
                .openConnection();
        conn.setConnectTimeout(10000);
        conn.setRequestMethod("GET");
        if (conn.getResponseCode() == 200) {
            InputStream is = conn.getInputStream();
            bitmap = BitmapFactory.decodeStream(is);
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bitmap;
}

// 進(jìn)行UI操作
@Override
protected void onProgressUpdate(Integer... values) {
    mProgressBar.setProgress(values[0]);
}

// 任務(wù)執(zhí)行完會retrun結(jié)果锐锣,就好執(zhí)行此方法,返回結(jié)果做為參數(shù)傳到此方法中
@Override
protected void onPostExecute(Bitmap result) {
    mProgressBar.setVisibility(View.GONE);
    mImageView.setImageBitmap(result);
}

}

執(zhí)行異步任務(wù)

new ShowPicTask(imageView, progressBar).execute("https://www.baidu.com/img/bdlogo.png");

基本原理

//早期版最多同時(shí)執(zhí)行5個(gè)線程绳瘟,多余的需要等待雕憔,同時(shí)執(zhí)行超過128個(gè)線程時(shí)會崩潰
// CPU 數(shù)量決定

private static final int CPU_COUNT =   Runtime.getRuntime().availableProcessors();
private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
private static final int KEEP_ALIVE = 1;
……  
//  采用線程池執(zhí)行       
 private static final ThreadPoolExecutor sExecutor = new ThreadPoolExecutor(CORE_POOL_SIZE,  
    MAXIMUM_POOL_SIZE, KEEP_ALIVE, TimeUnit.SECONDS, sWorkQueue, sThreadFactory); 
execute.png

excute() 方法調(diào)用 excuteOnExecuteor


excuteOnExecuteor.png

先調(diào)用onPreExecute,然后再使用線程池執(zhí)行異步任務(wù)

handler.png

采用Handler 進(jìn)行通知糖声,創(chuàng)建的Handler使用的是主線程的Looper斤彼,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蘸泻,隨后出現(xiàn)的幾起案子琉苇,更是在濱河造成了極大的恐慌,老刑警劉巖悦施,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件并扇,死亡現(xiàn)場離奇詭異,居然都是意外死亡抡诞,警方通過查閱死者的電腦和手機(jī)穷蛹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沐绒,“玉大人俩莽,你說我怎么就攤上這事∏钦冢” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵取刃,是天一觀的道長蹋肮。 經(jīng)常有香客問我,道長璧疗,這世上最難降的妖魔是什么坯辩? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮崩侠,結(jié)果婚禮上漆魔,老公的妹妹穿的比我還像新娘。我一直安慰自己却音,他們只是感情好改抡,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著系瓢,像睡著了一般阿纤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夷陋,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天欠拾,我揣著相機(jī)與錄音胰锌,去河邊找鬼。 笑死藐窄,一個(gè)胖子當(dāng)著我的面吹牛资昧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荆忍,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼格带,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了东揣?” 一聲冷哼從身側(cè)響起践惑,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘶卧,沒想到半個(gè)月后尔觉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芥吟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年侦铜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钟鸵。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钉稍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出棺耍,到底是詐尸還是另有隱情贡未,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布蒙袍,位于F島的核電站俊卤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏害幅。R本人自食惡果不足惜消恍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望以现。 院中可真熱鬧狠怨,春花似錦、人聲如沸邑遏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽无宿。三九已至茵汰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間孽鸡,已是汗流浹背蹂午。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工栏豺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人豆胸。 一個(gè)月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓奥洼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親晚胡。 傳聞我的和親對象是個(gè)殘疾皇子灵奖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容