欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂Android培訓(xùn)之異步處理應(yīng)該如何解釋詳解

2019-01-03 16:08:53 1650瀏覽

今天扣丁學(xué)堂Android培訓(xùn)老師給大家分享一篇關(guān)于Android中異步處理應(yīng)該如何解釋的技術(shù)介紹,首先在應(yīng)用的開發(fā)中正確處理好主線程和子線程之間的關(guān)系,耗時(shí)的操作都放到子線程中處理,避免阻塞主線程,導(dǎo)致ANR。異步處理技術(shù)是提高應(yīng)用性能,解決主線程和子線程之間通信問題的關(guān)鍵。那么異步技術(shù)鏈為:



Thread是Android中異步處理技術(shù)的基礎(chǔ),創(chuàng)建線程有兩種方法。繼承Thread類并重寫run方法,實(shí)現(xiàn)Runnable接口并實(shí)現(xiàn)run方法,ndroid應(yīng)用各種類型的線程本質(zhì)上基于linux系統(tǒng)的pthreads,在應(yīng)用層可以分為三種類型線程:

1、主線程:主線程也稱為UI線程,隨著應(yīng)用啟動(dòng)而啟動(dòng),主線程用來運(yùn)行Android組件,同時(shí)刷新屏幕上的UI元素。Android系統(tǒng)如果檢測(cè)到非主線程更新UI組件,那么就會(huì)拋出CalledFromWrongThreadException異常,只有主線程才能操作UI,是因?yàn)锳ndroid的UI工具包不是線程安全的。主線程中創(chuàng)建的Handler會(huì)順序執(zhí)行接受到的消息,包括從其他線程發(fā)送的消息。因此,如果消息隊(duì)列中前面的消息沒有很快執(zhí)行完,那么它可能會(huì)阻塞隊(duì)列中的其他消息的及時(shí)處理。

2、Binder線程:Binder線程用于不通過進(jìn)程之間線程的通信,每個(gè)進(jìn)程都維護(hù)了一個(gè)線程池,用來處理其他進(jìn)程中線程發(fā)送的消息,這些進(jìn)程包括系統(tǒng)服務(wù)、Intents、ContentProviders和Service等。在大部分情況下,應(yīng)用不需要關(guān)心Binder線程,因?yàn)橄到y(tǒng)會(huì)優(yōu)先將請(qǐng)求轉(zhuǎn)換為使用主線程。一個(gè)典型的需要使用Binder線程的場(chǎng)景是應(yīng)用提供一個(gè)給其他進(jìn)程通過AIDL接口綁定的Service。

3、后臺(tái)線程:在應(yīng)用中顯式創(chuàng)建的線程都是后臺(tái)線程,也就是當(dāng)剛創(chuàng)建出來時(shí),這些線程的執(zhí)行體是空的,需要手動(dòng)添加任務(wù)。在Linux系統(tǒng)層面,主線程和后臺(tái)線程是一樣的。在Android框架中,通過WindowManager賦予了主線程只能處理UI更新以及后臺(tái)線程不能直接操作UI的限制。

HandlerThread是一個(gè)集成了Looper和MessageQueue的線程,當(dāng)啟動(dòng)HandlerThread時(shí),會(huì)同時(shí)生成Looper和MessageQueue,然后等待消息進(jìn)行處理,使用HandlerThread的好處是開發(fā)者不需要自己去創(chuàng)建和維護(hù)Looper,它的用法和普通線程一樣。

AsyncQueryHandler是用于在ContentProvider上面執(zhí)行異步的CRUD操作的工具類,CRUD操作會(huì)被放到一個(gè)單獨(dú)的子線程中執(zhí)行,當(dāng)操作結(jié)束獲取到結(jié)果后,將通過消息的方式傳遞給調(diào)用AsyncQueryHandler的線程,通常就是主線程。AsyncQueryHandler是一個(gè)抽象類,集成自Handler,通過封裝ContentResolver、HandlerThread、AsyncQueryHandler等實(shí)現(xiàn)對(duì)ContentProvider的異步操作。

ExecutorFramework——?jiǎng)?chuàng)建和銷毀對(duì)象是存在開銷的,在應(yīng)用中頻繁出現(xiàn)線程的創(chuàng)建和銷毀,那么會(huì)影響到應(yīng)用的性能,使用Executor框架可以通過線程池機(jī)制解決這個(gè)問題,改善應(yīng)用的體驗(yàn)。

AsyncTask是在Executor框架基礎(chǔ)上進(jìn)行的封裝,它實(shí)現(xiàn)將耗時(shí)任務(wù)移動(dòng)到工作線程中執(zhí)行,同時(shí)提供方便的接口實(shí)現(xiàn)工作線程和主線程的通信。一個(gè)應(yīng)用中使用的所有AsyncTask實(shí)例會(huì)共享全局的屬性。

Loader是Android3.0開始引入的一個(gè)異步數(shù)據(jù)加載框架,它使得在Activity或者Fragment中異步加載數(shù)據(jù)變得簡(jiǎn)單,同時(shí)它在數(shù)據(jù)源發(fā)生變化時(shí),能夠及時(shí)發(fā)出消息通知。Loader是加載器框架的基類,封裝了實(shí)現(xiàn)異步數(shù)據(jù)加載的接口,當(dāng)一個(gè)加載器被激活后,它就會(huì)開始監(jiān)聽數(shù)據(jù)源并在數(shù)據(jù)發(fā)生改變時(shí)發(fā)送新的結(jié)果。AsyncTaskLoader是Loader的子類,它是基于AsyncTask實(shí)現(xiàn)的異步數(shù)據(jù)加載,它是一個(gè)抽象類,子類必須實(shí)現(xiàn)loadInBackground方法,在其中進(jìn)行具體的數(shù)據(jù)加載操作。

以上就是關(guān)于扣丁學(xué)堂Android培訓(xùn)之異步處理應(yīng)該如何解釋詳解,希望對(duì)同學(xué)們學(xué)習(xí)有所幫助,想要了解更多關(guān)于Android開發(fā)方面內(nèi)容的小伙伴,請(qǐng)關(guān)注扣丁學(xué)堂官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的Android開發(fā)環(huán)境搭建視頻,扣丁學(xué)堂老師精心推出的Android視頻教程定能讓你快速掌握Android從入門到精通開發(fā)實(shí)戰(zhàn)技能。


扣丁學(xué)堂微信公眾號(hào)


【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】


查看更多關(guān)于“Android開發(fā)技術(shù)的相關(guān)資訊>>

標(biāo)簽: Android培訓(xùn) Android學(xué)習(xí)路線 Android視頻教程 Android開發(fā)培訓(xùn) Android培訓(xùn)班

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國(guó)免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠(chéng)科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部