Good AsyncTask Hunting. (Android Performance Patterns Season 5, Ep. 4)

這是 Android 性能模式第五季的第四集闷旧,從本期開(kāi)始我會(huì)修改一下之前的規(guī)則窃这,不再一句英文一句中文對(duì)應(yīng),而是先看完整個(gè)視頻槽华,邊看邊翻譯壹蔓,從而整理出重要的知識(shí)點(diǎn)。

盡量縮短別人看文章花費(fèi)的時(shí)間猫态,而大量工作我做就好了佣蓉,就像我們寫(xiě)代碼一樣煮纵, 封裝細(xì)節(jié)后直接提供對(duì)方使用。

本期視頻地址:

https://www.youtube.com/watch?v=jtlRNNhane0

AsyncTask 讓我們又愛(ài)又恨(不過(guò)現(xiàn)在好像很少有人還會(huì)用它了吧)偏螺,不過(guò)作為 Android 提供的工具類(lèi),它確實(shí)提供了一些簡(jiǎn)單的使用方法匆光,但如果如果使用不當(dāng)套像,可能一不小心會(huì)傷害我們 App 的性能,比如內(nèi)存泄漏终息。

為什么會(huì)有 AsyncTask夺巩?我們都會(huì)遇到類(lèi)似的場(chǎng)景,比如我解碼圖片周崭,這確實(shí)會(huì)花費(fèi)一些時(shí)間柳譬,所以我們會(huì)選擇在后臺(tái)線(xiàn)程進(jìn)行,然后任務(wù)結(jié)束后在主線(xiàn)程更新 UI续镇,如果有很多這種場(chǎng)景美澳,那么我們不用每次都寫(xiě)一遍上面的代碼,我們提出公共部分寫(xiě)在一起就可以了摸航,所以 AsyncTask 就誕生了(不過(guò)一個(gè) AsyncTask 實(shí)例只能執(zhí)行一次)制跟。

工作流程.png

AsyncTask 為我們提供了一些簡(jiǎn)單易用的方法,比如當(dāng)我們使用的它時(shí)候酱虎,最常用的三個(gè)方法就是雨膨,下面圖中的方法,因?yàn)檫@就已經(jīng)完全可以讓我們完成一個(gè)基本的任務(wù)读串,我之前也寫(xiě)過(guò)關(guān)于 AsyncTask 的學(xué)習(xí)筆記聊记,地址如下:

http://www.reibang.com/p/3a1581cf2cbe

AsyncTask 基本工作流程和方法調(diào)用.png

雖然我們可以通過(guò)重寫(xiě)上面三個(gè)方法完成一個(gè)簡(jiǎn)單的 AsyncTask 但你還是需要小心,因?yàn)橛行┘?xì)微的問(wèn)題你需要注意恢暖,不然我可能會(huì)比較頭疼排监。

接下來(lái),會(huì)從三個(gè)方面說(shuō)一下會(huì)有哪些小問(wèn)題需要注意杰捂。

首先社露,我們需要注意 3.2 之后所有 AsyncTask 的任務(wù)都默認(rèn)順序執(zhí)行,如果你同時(shí)開(kāi)始了20個(gè)任務(wù)琼娘,那么 AsyncTask 會(huì)按照順序一個(gè)個(gè)執(zhí)行任務(wù)峭弟。

順序執(zhí)行任務(wù).png

不過(guò)我們可以通過(guò)通過(guò) executeOnExecutor() 指定執(zhí)行任務(wù)時(shí)的線(xiàn)程池,從而實(shí)現(xiàn)所有任務(wù)并行執(zhí)行脱拼,下過(guò)如下圖:

并行執(zhí)行.png

第二問(wèn)題是 cancel()瞒瘸, 看上去它的作用好像是取消一個(gè)任務(wù),但是實(shí)際上要配合 isCancelled() 使用熄浓,我們通過(guò) AsyncTask 對(duì)象調(diào)用 cancel()情臭,并在 doInBackground() 中使用 isCancelled()省撑,代碼如下:

取消任務(wù).png

So,我們是通過(guò) isCancelled() 判斷是否退出俯在,從而決定是否停止任務(wù)竟秫,不過(guò)當(dāng)我們?nèi)∠蝿?wù)后,我們?cè)谥骶€(xiàn)程回調(diào) onCancelled() 而不是 onPostExecute()跷乐。

最后一點(diǎn)肥败,也是最關(guān)鍵的一點(diǎn),就是當(dāng)我們 AsyncTask 作為普通內(nèi)部類(lèi)使用時(shí)愕提,從而引起內(nèi)存泄漏的問(wèn)題馒稍。因?yàn)閮?nèi)部類(lèi)會(huì)隱式的持有外部 Activity 的引用,從而使得 Activity 無(wú)法被正城城龋回收纽谒,直到 AsyncTask 執(zhí)行完任務(wù)。

內(nèi)部類(lèi)造成的內(nèi)存泄漏.png

在視頻結(jié)尾處如输,又介紹到了這些類(lèi)鼓黔,Android 確實(shí)給我們提供了一些不錯(cuò)的工具類(lèi),當(dāng)我們?cè)谑褂玫倪^(guò)程中更應(yīng)該去考慮不见,它們能幫我解決什么問(wèn)題请祖,又會(huì)帶來(lái)問(wèn)題或者隱患,所以不只是使用它們脖祈,而是應(yīng)該搞懂它們的原理肆捕,這樣才能更好地為我們所有。

又提到了這些類(lèi).png

如果有機(jī)會(huì)你其實(shí)你也可以去看看官方的視頻盖高,挺有趣的慎陵,不是么?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喻奥,一起剝皮案震驚了整個(gè)濱河市席纽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撞蚕,老刑警劉巖润梯,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異甥厦,居然都是意外死亡纺铭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)刀疙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舶赔,“玉大人,你說(shuō)我怎么就攤上這事谦秧【鼓桑” “怎么了撵溃?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)锥累。 經(jīng)常有香客問(wèn)我缘挑,道長(zhǎng),這世上最難降的妖魔是什么桶略? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任语淘,我火速辦了婚禮,結(jié)果婚禮上删性,老公的妹妹穿的比我還像新娘。我一直安慰自己焕窝,他們只是感情好蹬挺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著它掂,像睡著了一般巴帮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上虐秋,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天榕茧,我揣著相機(jī)與錄音,去河邊找鬼客给。 笑死用押,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的靶剑。 我是一名探鬼主播蜻拨,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼桩引!你這毒婦竟也來(lái)了缎讼?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坑匠,失蹤者是張志新(化名)和其女友劉穎血崭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體厘灼,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡夹纫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了设凹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捷凄。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖围来,靈堂內(nèi)的尸體忽然破棺而出跺涤,到底是詐尸還是另有隱情匈睁,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布桶错,位于F島的核電站航唆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏院刁。R本人自食惡果不足惜糯钙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望退腥。 院中可真熱鬧任岸,春花似錦、人聲如沸狡刘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嗅蔬。三九已至剑按,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澜术,已是汗流浹背艺蝴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸟废,地道東北人猜敢。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像盒延,于是被迫代替她去往敵國(guó)和親锣枝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,162評(píng)論 25 707
  • Android Handler機(jī)制系列文章整體內(nèi)容如下: Android Handler機(jī)制1之ThreadAnd...
    隔壁老李頭閱讀 3,212評(píng)論 1 15
  • Android開(kāi)發(fā)者:你真的會(huì)用AsyncTask嗎兰英? 導(dǎo)讀.1 在Android應(yīng)用開(kāi)發(fā)中撇叁,我們需要時(shí)刻注意保證...
    cxm11閱讀 2,709評(píng)論 0 29
  • 當(dāng)某個(gè)應(yīng)用組件啟動(dòng)且該應(yīng)用沒(méi)有運(yùn)行其他任何組件時(shí),Android 系統(tǒng)會(huì)使用單個(gè)執(zhí)行線(xiàn)程為應(yīng)用啟動(dòng)新的 Linux...
    小蕓論閱讀 1,692評(píng)論 0 12
  • 六十四歲的自己是一個(gè)什么樣的生活狀態(tài)呢畦贸?你有沒(méi)有想過(guò)陨闹? 我媽媽今年剛好六十四歲,她現(xiàn)在的主要任務(wù)是照看我的小侄女薄坏,...
    冬日霞光閱讀 665評(píng)論 3 0