AsyncTask與Handler

多線程

首先了解多線程

  • 應(yīng)用程序(Application):為了完成特定任務(wù)项鬼,用某種語言編寫的一組指令集合(一組靜態(tài)代碼)

  • 進(jìn)程:進(jìn)程指正在運(yùn)行的程序

    • 系統(tǒng)調(diào)度與資源分配的一個(gè)獨(dú)立單位
    • 當(dāng)一個(gè)程序進(jìn)入內(nèi)存運(yùn)行谆趾,即變成一個(gè)進(jìn)程
    • 進(jìn)程是處于運(yùn)行過程中的程序纱耻,并且具有一定獨(dú)立功能
  • 線程:線程是進(jìn)程中的一個(gè)執(zhí)行單元娘香,負(fù)責(zé)當(dāng)前進(jìn)程中程序的執(zhí)行

    • 一個(gè)進(jìn)程中至少有一個(gè)線程
    • 一個(gè)進(jìn)程中是可以有多個(gè)線程的杈笔,這個(gè)應(yīng)用程序也可以稱之為多線程程序

簡(jiǎn)而言之:一個(gè)程序運(yùn)行后至少有一個(gè)進(jìn)程道川,一個(gè)進(jìn)程中可以包含多個(gè)線程

  1. 線程是由程序負(fù)責(zé)管理的

  2. 而進(jìn)程則是由系統(tǒng)進(jìn)行調(diào)度的

線程的生命周期

  • 新建 :從新建一個(gè)線程對(duì)象到程序start() 這個(gè)線程之間的狀態(tài)蒋腮,都是新建狀態(tài)逗旁;
  • 就緒 :線程對(duì)象調(diào)用start()方法后朵你,就處于就緒狀態(tài)例诀,等到JVM里的線程調(diào)度器的調(diào)度荔泳;
  • 運(yùn)行 :就緒狀態(tài)下的線程在獲取CPU資源后就可以執(zhí)行run(),此時(shí)的線程便處于運(yùn)行狀態(tài)激况,運(yùn)行狀態(tài)的線程可變?yōu)榫途w、阻塞及死亡三種狀態(tài)淀衣。
  • 等待/阻塞/睡眠 :在一個(gè)線程執(zhí)行了sleep(睡眠)昙读、suspend(掛起)等方法后會(huì)失去所占有的資源,從而進(jìn)入阻塞狀態(tài)膨桥,在睡眠結(jié)束后可重新進(jìn)入就緒狀態(tài)蛮浑。
  • 終止 :run()方法完成后或發(fā)生其他終止條件時(shí)就會(huì)切換到終止?fàn)顟B(tài)。

線程創(chuàng)建的一般方法

實(shí)現(xiàn)步驟 優(yōu)勢(shì) 劣勢(shì)
繼承Thread類 ①只嚣、定義類繼承Thread
②沮稚、復(fù)寫Thread類中的run方法(目的:將自定義代碼存儲(chǔ)在run方法,讓線程運(yùn)行)
③册舞、調(diào)用線程的start方法:該方法有兩步:?jiǎn)?dòng)線程壮虫,調(diào)用run方法。
編寫簡(jiǎn)單环础,可直接用this.getname()獲取當(dāng)前線程,不必使用Thread.currentThread()方法 已經(jīng)繼承了Thread類剩拢,無法再繼承其他類
繼承Thread類 ①线得、定義類實(shí)現(xiàn)Runnable接口
②、覆蓋Runnable接口中的run方法(將線程要運(yùn)行的代碼放在該run方法中)
③徐伐、通過Thread類建立線程對(duì)象
④贯钩、將Runnable接口的子類對(duì)象作為實(shí)際參數(shù)傳遞給Thread類的構(gòu)造函數(shù)(線程執(zhí)行指定Runnable對(duì)象的run方法)
⑤、調(diào)用Thread類的start方法開啟線程并調(diào)用Runnable接口子類的run方法
避免了單繼承的局限性、多個(gè)線程可以共享一個(gè)target對(duì)象角雷,非常適合多線程處理同一份資源的情形 比較復(fù)雜祸穷、訪問線程必須使用Thread.currentThread()方法、無返回值
通過Callable和Future創(chuàng)建線程 ①勺三、創(chuàng)建Callable接口的實(shí)現(xiàn)類雷滚,并實(shí)現(xiàn)call()方法,改方法將作為線程執(zhí)行體吗坚,且具有返回值
②祈远、創(chuàng)建Callable實(shí)現(xiàn)類的實(shí)例,使用FutrueTask類進(jìn)行包裝Callable對(duì)象商源,F(xiàn)utureTask對(duì)象封裝了Callable對(duì)象的call()方法的返回值
③车份、使用FutureTask對(duì)象作為Thread對(duì)象啟動(dòng)新線程
④、調(diào)用FutureTask對(duì)象的get()方法獲取子線程執(zhí)行結(jié)束后的返回值
有返回值牡彻、避免了單繼承的局限性扫沼、多個(gè)線程可以共享一個(gè)target對(duì)象,非常適合多線程處理同一份資源的情形 比較復(fù)雜庄吼、訪問線程必須使用Thread.currentThread()方法

調(diào)用start()方法將會(huì)創(chuàng)建一個(gè)執(zhí)行run()方法的線程

不管何種情況下缎除,要想啟動(dòng)多線程霸褒,一定依靠Thread類完成

多線程應(yīng)用在Android開發(fā)

    1. 繼承Thread類
    2. 實(shí)現(xiàn)Runnable接口
    3. Handler
    4. AsyncTask
    5. HandlerThread
    6. IntentService

進(jìn)程和線程的區(qū)別

根本區(qū)別

  • 進(jìn)程是操作系統(tǒng)資源分配的基本單位

  • 線程是處理器任務(wù)調(diào)度和執(zhí)行的基本單位

進(jìn)程 線程
資源開銷 每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(程序上下文),程序之間的切換會(huì)有較大的開銷 線程可以看做輕量級(jí)的進(jìn)程废菱,同一類線程共享代碼和數(shù)據(jù)空間,每個(gè)線程都有自己獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC)殊轴,線程之間切換的開銷小
包含關(guān)系 如果一個(gè)進(jìn)程內(nèi)有多個(gè)線程衰倦,則執(zhí)行過程不是一條線的,而是多條線(線程)共同完成的 線程是進(jìn)程的一部分旁理,所以線程也被稱為輕權(quán)進(jìn)程或者輕量級(jí)進(jìn)程
內(nèi)存分配 進(jìn)程之間的地址空間和資源是相互獨(dú)立的 同一進(jìn)程的線程共享本進(jìn)程的地址空間和資源
影響關(guān)系 一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其他進(jìn)程產(chǎn)生影響 一個(gè)線程崩潰整個(gè)進(jìn)程都死掉
執(zhí)行過程 每個(gè)獨(dú)立的進(jìn)程有程序運(yùn)行的入口驻襟、順序執(zhí)行序列和程序出口 線程不能獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中芋哭,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制

多進(jìn)程要比多線程健壯

兩者均可并發(fā)執(zhí)行

AsyncTask和Handler的區(qū)別

  • 數(shù)據(jù)簡(jiǎn)單使用AsyncTask沉衣,實(shí)現(xiàn)代碼簡(jiǎn)單,數(shù)據(jù)量多且復(fù)雜使用handler+thread

  • 相比較AsyncTask來說能更好的利用系統(tǒng)資源且高效减牺,但有些復(fù)雜邏輯比較難完成

AsyncTask實(shí)現(xiàn)的原理和適用的優(yōu)缺點(diǎn)

AsyncTask存谎,是android提供的輕量級(jí)的異步類肥隆,可以直接繼承AsyncTask,在類中實(shí)現(xiàn)異步操作栋艳,提供接口反饋當(dāng)前異步執(zhí)行的程度(可以通過接口實(shí)現(xiàn)UI進(jìn)度更新),最后反饋執(zhí)行的結(jié)果給UI主線程

  • 使用的優(yōu)點(diǎn):

    1. 簡(jiǎn)單,快捷

    2. 過程可控

  • 使用的缺點(diǎn):
    在使用多個(gè)異步操作和并需要進(jìn)行Ui變更時(shí),就變得復(fù)雜起來.

Handler異步實(shí)現(xiàn)的原理和適用的優(yōu)缺點(diǎn)

在Handler 異步實(shí)現(xiàn)時(shí)憨琳,涉及到 Handler, Looper, Message,Thread四個(gè)對(duì)象,實(shí)現(xiàn)異步的流程是主線程啟動(dòng)Thread(子線程)運(yùn)行并生成Message-Looper獲取Message并傳遞給HandlerHandler逐個(gè)獲取Looper中的Message篙螟,并進(jìn)行UI變更

  • 使用的優(yōu)點(diǎn):

    1. 結(jié)構(gòu)清晰问拘,功能定義明確

    2. 對(duì)于多個(gè)后臺(tái)任務(wù)時(shí),簡(jiǎn)單骤坐,清晰

  • 使用的缺點(diǎn):
    在單個(gè)后臺(tái)異步處理時(shí),顯得代碼過多蕾久,結(jié)構(gòu)過于復(fù)雜(相對(duì)性)

多線程(Thread、線程創(chuàng)建僧著、線程池

Android

Application應(yīng)用程序

安卓阿申克塔斯克棄用障簿, 現(xiàn)在怎么辦? (techyourchance.com)

Android —— 靜態(tài)AsyncTask解決內(nèi)存泄漏

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末皆怕,一起剝皮案震驚了整個(gè)濱河市西篓,隨后出現(xiàn)的幾起案子愈腾,更是在濱河造成了極大的恐慌岂津,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件礁鲁,死亡現(xiàn)場(chǎng)離奇詭異赁豆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)魔种,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叶摄,“玉大人安拟,你說我怎么就攤上這事】飞猓” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵拙泽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我顾瞻,道長(zhǎng),這世上最難降的妖魔是什么退渗? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任梅猿,我火速辦了婚禮,結(jié)果婚禮上袱蚓,老公的妹妹穿的比我還像新娘。我一直安慰自己喇潘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布絮吵。 她就那樣靜靜地躺著忱屑,像睡著了一般暇昂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上急波,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天瘪校,我揣著相機(jī)與錄音,去河邊找鬼阱扬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛馍刮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播渠退,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼脐彩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了惠奸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤梗掰,失蹤者是張志新(化名)和其女友劉穎嗅回,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绵载,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娃豹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了懂版。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡民鼓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丰嘉,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布克滴,位于F島的核電站,受9級(jí)特大地震影響劝赔,放射性物質(zhì)發(fā)生泄漏胆敞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一移层、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧予借,春花似錦、人聲如沸灵迫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽三圆。三九已至,卻和暖如春哀澈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背割按。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工磷籍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留现柠,地道東北人弛矛。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像丈氓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子万俗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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