Android面試題-OOM、ANR冰啃、內(nèi)存泄漏

ANR 是什么邓夕?怎樣避免和解決 ANR刘莹?

ANR:Application Not Responding,即應(yīng)用無響應(yīng)
ANR 一般有三種類型:
1. KeyDispatchTimeout(5 seconds)–主要類型:按鍵或觸摸事件在特定時(shí)間內(nèi)無響應(yīng)
2. BroadcastTimeout(10 seconds):BroadcastReceiver 在特定時(shí)間內(nèi)無法處理完成
3. ServiceTimeout(20 seconds)–小概率類型:Service 在特定的時(shí)間內(nèi)無法處理完成超時(shí)的原因一般有兩種:(1)當(dāng)前的事件沒有機(jī)會(huì)得到處理(UI 線程正在處理前一個(gè)事件沒有及時(shí)完成或者 looper 被某種原因阻塞追俑铡)(2)當(dāng)前的事件正在處理点弯,但沒有及時(shí)完成。UI 線程盡量只做跟 UI 相關(guān)的工作矿咕,耗時(shí)的工作(數(shù)據(jù)庫操作抢肛、I/O、連接網(wǎng)絡(luò)或者其他可能阻礙 UI 線程的操作)放入單獨(dú)的線程處理碳柱,盡量用 Handler 來處理 UI thread 和 thread 之間的交互捡絮。

ANR 的原因

  1. 耗時(shí)的網(wǎng)絡(luò)訪問
  2. 大量的數(shù)據(jù)讀寫
  3. 數(shù)據(jù)庫操作
  4. 硬件操作(比如 Camera)
  5. 調(diào)用 thread 的 join()方法、sleep()方法士聪、wait()方法或者等待線程鎖的時(shí)候
  6. service binder 的數(shù)量達(dá)到上限
  7. system server 中發(fā)生 WatchDog ANR
  8. service 忙導(dǎo)致超時(shí)無響應(yīng)
  9. 其他線程持有鎖锦援,導(dǎo)致主線程等待超時(shí)
  10. 其它線程終止或崩潰導(dǎo)致主線程一直等待

什么是Android 內(nèi)存泄露

Android 內(nèi)存泄漏指的是進(jìn)程中某些對(duì)象(垃圾對(duì)象)已經(jīng)沒有使用價(jià)值了,但是它們卻可以直接或間接地引用到 gc roots 導(dǎo)致無法被 GC 回收剥悟。無用的對(duì)象占據(jù)著內(nèi)存空間灵寺,使得實(shí)際可使用內(nèi)存變小,形象地說法就是內(nèi)存泄漏了区岗。
場(chǎng)景
1. 類的靜態(tài)變量持有大數(shù)據(jù)對(duì)象:靜態(tài)變量長(zhǎng)期維持到大數(shù)據(jù)對(duì)象的引用略板,阻止垃圾回收。
2. 非靜態(tài)內(nèi)部類的靜態(tài)實(shí)例:非靜態(tài)內(nèi)部類會(huì)維持一個(gè)到外部類實(shí)例的引用慈缔,如果非靜態(tài)內(nèi)部類的實(shí)例是靜態(tài)的叮称,就會(huì)間接長(zhǎng)期維持著外部類的引用,阻止被回收掉藐鹤。
3. 資源對(duì)象未關(guān)閉:資源性對(duì)象如 Cursor瓤檐、File、Socket娱节,應(yīng)該在使用后及時(shí)關(guān)閉挠蛉。未在 finally 中關(guān)閉,會(huì)導(dǎo)致異常情況下資源對(duì)象未被釋放的隱患肄满。
4. 注冊(cè)對(duì)象未反注冊(cè):未反注冊(cè)會(huì)導(dǎo)致觀察者列表里維持著對(duì)象的引用谴古,阻止垃圾回收。
5. Handler 臨時(shí)性內(nèi)存泄露:Handler 通過發(fā)送 Message 與主線程交互稠歉,Message 發(fā)出之后是存儲(chǔ)在 MessageQueue 中的掰担,有些 Message 也不是馬上就被處理的。在 Message 中存在一個(gè) target怒炸,是 Handler 的一個(gè)引用带饱,如果 Message 在 Queue 中存在的時(shí)間越長(zhǎng),就會(huì)導(dǎo)致Handler 無法被回收横媚。如果 Handler 是非靜態(tài)的纠炮,則會(huì)導(dǎo)致 Activity 或者 Service 不會(huì)被回收月趟。
6. 由于 AsyncTask 內(nèi)部也是 Handler 機(jī)制灯蝴,同樣存在內(nèi)存泄漏的風(fēng)險(xiǎn)恢口。此種內(nèi)存泄露,一般是臨時(shí)性的穷躁。
7. 多線程相關(guān)的匿名內(nèi)部類和非靜態(tài)內(nèi)部類:匿名內(nèi)部類同樣會(huì)持有外部類的引用耕肩,如果在線程中執(zhí)行耗時(shí)操作就有可能發(fā)生內(nèi)存泄漏,導(dǎo)致外部類無法被回收问潭,直到耗時(shí)任務(wù)結(jié)束猿诸,解決辦法是在頁面退出時(shí)結(jié)束線程中的任務(wù)。
8.Context 導(dǎo)致內(nèi)存泄漏:禁止聲明靜態(tài)Context變量
9.靜態(tài) View 導(dǎo)致內(nèi)存泄漏
10.WebView 導(dǎo)致的內(nèi)存泄漏:WebView 只要使用一次狡忙,內(nèi)存就不會(huì)被釋放梳虽,所以 WebView 都存在內(nèi)存泄漏的問題,通常的解決辦法是為 WebView 單開一個(gè)進(jìn)程灾茁,使用 AIDL 進(jìn)行通信窜觉,根據(jù)業(yè)務(wù)需求在合適的時(shí)機(jī)釋放掉

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市北专,隨后出現(xiàn)的幾起案子禀挫,更是在濱河造成了極大的恐慌,老刑警劉巖拓颓,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件语婴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡驶睦,警方通過查閱死者的電腦和手機(jī)砰左,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來场航,“玉大人缠导,你說我怎么就攤上這事∑烀觯” “怎么了酬核?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)适室。 經(jīng)常有香客問我嫡意,道長(zhǎng),這世上最難降的妖魔是什么捣辆? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任蔬螟,我火速辦了婚禮,結(jié)果婚禮上汽畴,老公的妹妹穿的比我還像新娘旧巾。我一直安慰自己耸序,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布鲁猩。 她就那樣靜靜地躺著坎怪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪廓握。 梳的紋絲不亂的頭發(fā)上搅窿,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音隙券,去河邊找鬼男应。 笑死,一個(gè)胖子當(dāng)著我的面吹牛娱仔,可吹牛的內(nèi)容都是我干的沐飘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼牲迫,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼耐朴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恩溅,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤隔箍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后脚乡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜒滩,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年奶稠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俯艰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锌订,死狀恐怖竹握,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辆飘,我是刑警寧澤啦辐,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站蜈项,受9級(jí)特大地震影響芹关,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜紧卒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一侥衬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦轴总、人聲如沸直颅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽功偿。三九已至,卻和暖如春漂佩,著一層夾襖步出監(jiān)牢的瞬間脖含,已是汗流浹背罪塔。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工投蝉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人征堪。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓瘩缆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親佃蚜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庸娱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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