AsyncTask 源碼解析

android 1.6之前的版本版本AsyncTask都是串行丧荐,也就是它會把所有的任務(wù)都一串一串的放在線程池中辱魁,有序的進行執(zhí)行,而在1.6和2.3版本的時候畴蒲,它改成了并行悠鞍,但是在2.3版本以后為了維護系統(tǒng)的穩(wěn)定,google又把它改成了串行饿凛,但是它還是可以執(zhí)行并行狞玛,執(zhí)行并行的時候可以調(diào)用executeOnExecutor()這個方法就可以并行软驰,一般建議只使用串行涧窒,這樣能保證整個線程池的穩(wěn)定,因為如果并發(fā)的話锭亏,整個線程池內(nèi)部其實是不穩(wěn)定的纠吴,雖然它效率很高,但是AsyncTask一般做不了高并發(fā)慧瘤,太耗時的操作戴已。

AsncTask框架的整體結(jié)構(gòu)。

AsynTask的五個方法
onPreExecute() //后臺執(zhí)行開始前調(diào)用
doInBackground() //執(zhí)行耗時代碼
pushlishProgress() //在doInBackground中調(diào)用锅减,為觸發(fā)onProgressUpdate
onProgressUpdate()
onPostExecute() //后臺執(zhí)行完成時調(diào)用
OnDestroy()生命周期方法里面進行syncTask的cancel()方法調(diào)用糖儡。

AsyncTask的機制原理
1.AsyncTask的本質(zhì)是一個靜態(tài)的線程池,AsyncTask派生出的子類可以實現(xiàn)不同的異步任務(wù)怔匣,這些任務(wù)都是提交到靜態(tài)的線程池中執(zhí)行握联。
2.線程池中的工作線程執(zhí)行doInBackground(mParams)方法執(zhí)行異步任務(wù)
3.當(dāng)任務(wù)狀態(tài)改變之后,工作線程會向UI線程發(fā)送消息每瞒,AsyncTask內(nèi)部的InternalHandler相應(yīng)這些消息,并調(diào)用相關(guān)的回調(diào)函數(shù)金闽。

注意:
在屏幕旋轉(zhuǎn),或activity由于后臺系統(tǒng)殺掉剿骨,就是內(nèi)存不夠的情況下被殺掉代芜,會導(dǎo)致activity被重新創(chuàng)建,之前運行的AsyncTask會持有當(dāng)前Activity的引用浓利,但是這個引用已經(jīng)無效了挤庇,所以說這時調(diào)用AsyncTask的onPostExecute()去更新界面钞速,就是不會在生效,這就是asyncTask結(jié)果丟失的原因罚随。
解決方法:
OnDestroy()生命周期方法里面進行syncTask的cancel()方法調(diào)用玉工。

當(dāng)Activity被銷毀時,其實AsyncTask還在后臺執(zhí)行淘菩,所以又與handler一樣存在內(nèi)存泄漏問題遵班,解決方法同handler類似

參考:http://blog.csdn.net/lmj623565791/article/details/38614699

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市潮改,隨后出現(xiàn)的幾起案子狭郑,更是在濱河造成了極大的恐慌,老刑警劉巖汇在,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翰萨,死亡現(xiàn)場離奇詭異,居然都是意外死亡糕殉,警方通過查閱死者的電腦和手機亩鬼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阿蝶,“玉大人雳锋,你說我怎么就攤上這事∠劢啵” “怎么了玷过?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長筑煮。 經(jīng)常有香客問我辛蚊,道長,這世上最難降的妖魔是什么真仲? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任袋马,我火速辦了婚禮,結(jié)果婚禮上秸应,老公的妹妹穿的比我還像新娘虑凛。我一直安慰自己,他們只是感情好灸眼,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布卧檐。 她就那樣靜靜地躺著,像睡著了一般焰宣。 火紅的嫁衣襯著肌膚如雪霉囚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天匕积,我揣著相機與錄音盈罐,去河邊找鬼榜跌。 笑死,一個胖子當(dāng)著我的面吹牛盅粪,可吹牛的內(nèi)容都是我干的钓葫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼票顾,長吁一口氣:“原來是場噩夢啊……” “哼础浮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奠骄,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤豆同,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后含鳞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體影锈,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年蝉绷,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸭廷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡熔吗,死狀恐怖辆床,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情磁滚,我是刑警寧澤佛吓,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布宵晚,位于F島的核電站垂攘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏淤刃。R本人自食惡果不足惜晒他,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逸贾。 院中可真熱鬧陨仅,春花似錦、人聲如沸铝侵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咪鲜。三九已至狐赡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疟丙,已是汗流浹背颖侄。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工鸟雏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人览祖。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓孝鹊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親展蒂。 傳聞我的和親對象是個殘疾皇子又活,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

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