Android筆記4-android之多線程和異步任務

Android之多線程和異步任務

為什么要用多線程

1.提高用戶體驗或者避免ANR
2.異步
應用中有些情況下并不一定需要同步阻塞去等待返回結(jié)果,可以通過多線程來實現(xiàn)異步,例如你的應用中的某個Activity需要從云端獲取一些圖片,加載圖片比較耗時,這時需要使用異步加載骑冗,加載完成一個圖片刷新一個。
3.多任務
多任務下載
后兩點與java中的多線程應用沒有太大的區(qū)別

什么事ANR

Application Not Responding 意思是程序未響應先煎。如果一個應用無法響應用戶的輸入贼涩,系統(tǒng)就會彈出一個ANR對話框

Android應用程序的main線程,它負責處理UI的繪制榨婆,Android系統(tǒng)為了防止應用程序反應較慢導致系統(tǒng)無法正常運行做了一個處理磁携,一種情況是當用戶輸入事件在5秒內(nèi)無法得到響應,那么系統(tǒng)會彈出ANR對話框良风,由用戶決定繼續(xù)等待還是強制結(jié)束應用程序檬洞,另一種情況是BroadcastReceiver超過10秒沒執(zhí)行完也會彈出ANR對話框岩饼。

事件處理原則

所有可能耗時的操作都放到其他線程去處理
Android中的Main線程不能處理耗時的事件拳芙,否則后續(xù)的事件無法在5面內(nèi)得到響應瞒渠,就會彈出ANR對話框,那么哪些方法會在Main線程中執(zhí)行呢疑俭?
1.Activity的生命周期方法粮呢,例如onCreate,onStart钞艇,onResume等
2.事件處理方法啄寡,例如onClick,onItemClick等


image.png

多線程

1.繼承Thread類實現(xiàn)多線程
2.實現(xiàn)Runnable接口方式實現(xiàn)多線程
兩者之間的區(qū)別:
一個類只能繼承一個父類哩照,存在局限挺物,但一個來可以實現(xiàn)多個接口。
實現(xiàn)Runnable接口適合于資源共享
public class Thread extends Object implements Runnable
可以看出Thread類也是Runnable接口的子類

new Thread的弊端

1.每次new Thread新建對象性能差
2.線程缺乏統(tǒng)一管理飘弧,可能無限制新建線程识藤,相互之間競爭砚著,及可能占用過多系統(tǒng)資源導致死機或oom
3.缺乏更多功能,如定時執(zhí)行痴昧, 定期執(zhí)行稽穆,線程中斷

Java線程池

1.newCachedThreadPool
創(chuàng)建一個可緩存線程池,如果線程池長度超過處理需要赶撰,可靈活回收空閑線程舌镶,若無可回收,則新建線程扣囊。


image.png

2.newFixedThreadPool
創(chuàng)建一個定長線程池乎折,可控制線程最大并發(fā)數(shù),超出的線程會在隊列中等待侵歇。
3.newSingleThreadExecutor
創(chuàng)建一個單線程化的線程池,它只會用唯一的工作線程來執(zhí)行任務
4.newScheduledThreadPool
創(chuàng)建一個定長線程池吓蘑,支持定時及周期性任務執(zhí)行

image.png

異步消息處理機制

線程與線程之間如何通訊
Android SDK提供的幾個線程簡通訊的類
1.Handler
Handler在android里負責發(fā)送和處理消息惕虑,通過它可以實現(xiàn)其他線程與Main線程之間的消息通訊。
2.Looper
Looper負責管理線程的消息隊列和消息循環(huán)磨镶。
3.Message
Message是線程間通訊的消息載體溃蔫。
4.MessageQueue
MessageQueue是消息隊列,先進先出琳猫,它的作用是保存有待處理的消息
四者之間的關(guān)系是:在其他線程中調(diào)用Handler.sendMessage方法(參數(shù)是Message對象)伟叛,將Main線程需要處理的事件添加到Main線程的MessageQueue中,Main線程通過MainLooper從消息隊列中取出Handler發(fā)過來的消息脐嫂,會回調(diào)Handler的handleMessage方法

image.png

Handler的send系列方法

1.sendEmptyMessage(int)
2.sendMessage(Message)
3.sendMessageAtTime(Message,long)
4.sendMessageDelayed(Message,long)

Handler的post方法

1.post(Runnable)
2.postAtTime(Runnable,long)
3.postDelayed(Runnable long)
post方法允許你安排一個Runnable對象到主線程隊列中统刮,等待執(zhí)行

image.png

以下幾種方法可以在子線程中進行UI操作

1、View的post方法

public boolean post(Runnable action) {
        Handler handler;
        if(mAttachInfo != null){
                handler = mAttachInfo.mHandler;
        }else{
                ViewRoot.getRunQueue().post(action);
                return true;
        }
        return handler.post(action);
}

2.Activity的runOnUiThread方法

AsyncTask

異步任務账千,將耗時的操作放在異步任務中來執(zhí)行侥蒙,并隨時將任務執(zhí)行的結(jié)果返回給我們的UI線程

image.png
image.png
image.png
image.png
image.png

滑動輪播圖片的實現(xiàn)方式

1.欺騙適配器
將適配器的getCount的值設(shè)置為最大值
2.構(gòu)造數(shù)據(jù)源
有五張圖片,實現(xiàn)無線循環(huán)匀奏。在viewpager中設(shè)置7個view鞭衩,第一個為五張圖片的最后一張, 第七章為五張圖片的第一張娃善,圖片順序如下數(shù)字:
4-0-1-2-3-4-0
0-1-2-3-4 為正產(chǎn)的五張圖片论衍,4,0為添加的兩個圖片view
滑動的順序:進入頁面顯示0圖片,向右滑動到0頁設(shè)置為0聚磺,則可以繼續(xù)向右滑動坯台,同理向左滑動到4時,將4頁設(shè)置為4咧最。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捂人,一起剝皮案震驚了整個濱河市御雕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滥搭,老刑警劉巖酸纲,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瑟匆,居然都是意外死亡闽坡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門愁溜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疾嗅,“玉大人,你說我怎么就攤上這事冕象〈校” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵渐扮,是天一觀的道長论悴。 經(jīng)常有香客問我,道長墓律,這世上最難降的妖魔是什么膀估? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮耻讽,結(jié)果婚禮上察纯,老公的妹妹穿的比我還像新娘。我一直安慰自己针肥,他們只是感情好饼记,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著祖驱,像睡著了一般握恳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捺僻,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天乡洼,我揣著相機與錄音,去河邊找鬼匕坯。 笑死束昵,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的葛峻。 我是一名探鬼主播锹雏,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼术奖!你這毒婦竟也來了礁遵?” 一聲冷哼從身側(cè)響起轻绞,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎佣耐,沒想到半個月后政勃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡兼砖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年奸远,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讽挟。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡懒叛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耽梅,到底是詐尸還是另有隱情薛窥,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布褐墅,位于F島的核電站拆檬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏妥凳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一答捕、第九天 我趴在偏房一處隱蔽的房頂上張望逝钥。 院中可真熱鬧,春花似錦拱镐、人聲如沸艘款。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哗咆。三九已至,卻和暖如春益眉,著一層夾襖步出監(jiān)牢的瞬間晌柬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工郭脂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留年碘,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓展鸡,卻偏偏與公主長得像屿衅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子莹弊,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

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