色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Android多線程的實現(xiàn)

Android多線程的實現(xiàn) 時間:2018-03-16      來源:Android多線程實現(xiàn)

熟悉java的你,對多線程編程一定不會陌生吧。當我們需要執(zhí)行一些耗時操作,比如說發(fā)起一條網(wǎng)絡(luò)請求時,考慮到網(wǎng)速等其他原因,服務(wù)器未必會立刻響應(yīng)我們的請求,如果不將這類操作放在子線程里去運行,就會導(dǎo)致主線程阻塞,從而影響用戶對軟件的正常使用并使得用戶體驗度降低,那么就讓我們從線程的基本用法開始學(xué)習(xí)吧!

說到線程,就不得不先說線程和進程的關(guān)系,這里先簡單解釋一下。操作系統(tǒng)支持同時運行多個任務(wù),一個任務(wù)通常就是一個程序,每個運行中的程序就是一個進程。當一個程序運行時,內(nèi)部可能包含了多個順序執(zhí)行流,每個順序執(zhí)行流就是一個線程。

Android提供了四種常用的操作多線程的方式:分別是:

(1)Handler機制

(2)AsyncTask

(3)Activity.runOnUiThread(Runnable)

(4)IntentService

下面我將對這四種方式進行介紹

Handler機制(此方法最為常用,這里我將簡單概述)

Handler來根據(jù)接收的消息,處理UI更新。Thread線程發(fā)出Handler消息,通知更新UI。

代碼如下:

Android多線程實現(xiàn)

Android多線程編程

AsyncTask

AsyncTask: 異步任務(wù),從字面上來說,就是在我們的UI主線程運行的時候,異步的完成一些操作。AsyncTask允許我們的執(zhí)行一個異步的任務(wù)在后臺。我們可以將耗時的操作放在異步任務(wù)當中來執(zhí)行,并隨時將任務(wù)執(zhí)行的結(jié)果返回給我們的UI線程來更新我們的UI控件。通過AsyncTask我們可以輕松的解決多線程之間的通信問題。

怎么來理解AsyncTask呢?通俗一點來說,AsyncTask就相當于Android給我們提供了一個多線程編程的一個框架,其介于Thread和Handler之間,我們?nèi)绻x一個AsyncTask,就需要定義一個類來繼承AsyncTask這個抽象類,并實現(xiàn)其唯一的一個doInBackgroud 抽象方法。要掌握AsyncTask,我們就必須要一個概念,總結(jié)起來就是: 3個泛型,4個步驟。

3個泛型指的是什么呢?我們來看看AsyncTask這個抽象類的定義,當我們定義一個類來繼承AsyncTask這個類的時候,我們需要為其指定3個泛型參數(shù):

AsyncTask

-Params:這個泛型指定的是我們傳遞給異步任務(wù)執(zhí)行時的參數(shù)的類型

-Progress:這個泛型指定的是我們的異步任務(wù)在執(zhí)行的時候?qū)?zhí)行的進度返回給UI線程的參數(shù)的類型

-Result:這個泛型指定的異步任務(wù)執(zhí)行完后返回給UI線程的結(jié)果的類型

我們在定義一個類繼承AsyncTask類的時候,必須要指定好這三個泛型的類型,如果都不指定的話,則都將其寫成Void,例如:

AsyncTask

4個步驟:當我們執(zhí)行一個異步任務(wù)的時候,需要按照下面的4個步驟分別執(zhí)行

-onPreExecute(這個方法是在執(zhí)行異步任務(wù)之前的時候執(zhí)行,并且是在UI Thread當中執(zhí)行的,通常我們在這個方法里做一些UI控件的初始化的操作,例如彈出要給ProgressDialog

-doInBackground(Params...params):在onPreExecute()方法執(zhí)行完之后,會馬上執(zhí)行這個方法,這個方法就是來處理異步任務(wù)的方法,Android操作系統(tǒng)會在后臺的線程池當中開啟一個worker thread來執(zhí)行我們的這個方法,所以這個方法是在worker thread當中執(zhí)行的,這個方法執(zhí)行完之后就可以將我們的執(zhí)行結(jié)果發(fā)送給我們的最后一個onPostExecute方法,在這個方法里,我們可以從網(wǎng)絡(luò)當中獲取數(shù)據(jù)等一些耗時的操作

-onProgressUpdate(Progess...values): 這個方法也是在UI Thread當中執(zhí)行的,我們在異步任務(wù)執(zhí)行的時候,有時候需要將執(zhí)行的進度返回給我們的UI界面,例如下載一個網(wǎng)絡(luò)圖片,我們需要時刻顯示其下載的進度,就可以使用這個方法來更新我們的進度。這個方法在調(diào)用之前,我們需要doInBackground方法中調(diào)用一個publishProgress(Progress的方法來將我們的進度時時刻刻傳遞給onProgressUpdate方法來更新

Activity.runOnUiThread(Runnable)

利用runOnUiThread(Runnable)把更新UI的代碼創(chuàng)建在Runnable中,然后在需要更新UI時,把這個Runnable對象傳給runOnUiThread(Runnable)。Runnable對象就能在UI程序中被調(diào)用。如果當前線程是UI線程,那么行動被立即執(zhí)行。如果當前線程不是UI線程,操作是發(fā)布到事件隊列的UI線程。

代碼如下:

Android多線程編程

Android多線程編程

IntentService

IntentService繼承自Service,是一個經(jīng)過包裝的輕量級的Service,用來接收并處理通過Intent傳遞的異步請求。客戶端通過調(diào)用startService(Intent)啟動一個IntentService,利用一個work線程依次處理順序過來的請求,處理完成后自動結(jié)束Service。

以上就是我為大家?guī)淼陌沧慷嗑程相關(guān)知識,希望對大家以后在Android開發(fā)道路中有所幫助,更上一層樓!

上一篇:單片機最小系統(tǒng)概述

下一篇:逆變器電路圖

熱點文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗分享
熱點新聞推薦
前臺專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權(quán)所有 ,京ICP備16055225號-5京公海網(wǎng)安備11010802025203號

回到頂部

主站蜘蛛池模板: 五十路熟女丰满大屁股 | 亚洲国产精品成人AV在线 | 欧美人免费视频网站在线 | 久久综合给合久久狠狠狠88 | 亚洲精品456在线播放乱码 | sifangtv国产在线播放 | 欧美日韩久久久久久 | 中日韩无砖码一线二线 | 我要看免费一级毛片 | 真实国产乱啪福利露脸 | 国产一区二区三区在线视频观看 | 亚洲精品无码成人a片九色播放 | 亚洲av日韩av高潮无码专区 | 亚洲AV成人一二三区观看 | 色噜噜狠狠一区二区三区 | 女人一级黄色片 | 色欲精品国产一区二区三区AV | 四季av一区二区三 | 黑森林精品AV导航 | 免费无码黄动漫在线观看 | 写真福利片hd在线观看 | 免费观看Aⅴ成人片 | 国产熟妇搡BBBB搡BBBB | 加勒比色综合久久久久久久久 | 无码天堂亚洲国产AV | 中国一级毛片免费看 | 精品国产一区二区三区AV | www.欧美在线观看 | 国内揄拍国内精品人妻浪潮AV | 波多野结衣在线视频免费观看 | 大地资源网高清视频怎么在线 | 扒开粉嫩的小缝喷白浆 | 国产99网站 | 看免费黄色毛片 | 亚洲精品高清国产一久久 | 中国亚洲呦女专区 | 欧美爱爱小视频 | 国产免费无码AV在线观看 | 午夜高清无码视频在线观看 | 国产在线精品无码二区 | 国产成人亚洲综合色 |