Android程序崩潰大家都應(yīng)該遇到過(guò),force close和ANR應(yīng)該是大家遇到較多的踏枣。
這里把Android平臺(tái)程序崩潰的各種類型做一個(gè)簡(jiǎn)述和原因列舉。
1.ANR(可見(jiàn)ANR):
發(fā)生場(chǎng)景:應(yīng)用發(fā)生ANR蝌借。
崩潰癥狀:系統(tǒng)彈出窗口詢問(wèn)用戶選擇“Force Close”或者“Wait”衙传。
“Force Close”將殺掉發(fā)生ANR的應(yīng)用進(jìn)程◎拘兀“Wait”將會(huì)等待系統(tǒng)擇機(jī)恢復(fù)此應(yīng)用進(jìn)程挣饥。
發(fā)生原因:(1)應(yīng)用主線程卡住,對(duì)其他請(qǐng)求響應(yīng)超時(shí)沛膳。(2)死鎖扔枫。(3)系統(tǒng)反應(yīng)遲鈍。(4)CPU負(fù)載過(guò)重锹安。
2.Force Close:
發(fā)生場(chǎng)景:應(yīng)用進(jìn)程崩潰短荐。
崩潰癥狀:系統(tǒng)彈出窗口提示用戶某進(jìn)程崩潰。
發(fā)生原因:空指針異常等未捕捉的異常叹哭。
但是現(xiàn)在MIUI等系統(tǒng)下忍宋,系統(tǒng)會(huì)幫你捕獲異常,但是應(yīng)用程序已經(jīng)掛了风罩,導(dǎo)致這種情況轉(zhuǎn)變?yōu)锳NR糠排。
3.Tombstones:
發(fā)生場(chǎng)景:Native層崩潰
崩潰癥狀:如果發(fā)生崩潰的native層和UI有關(guān)聯(lián)(比如Browser),我們可以在UI上發(fā)現(xiàn)這個(gè)崩潰超升。
如果發(fā)生崩潰的native層是在后臺(tái)并且和UI沒(méi)有直接聯(lián)系入宦,那么對(duì)于用戶來(lái)說(shuō)是不可見(jiàn)的哺徊,如果是debug版本可能會(huì)有Log打印出當(dāng)時(shí)的底層現(xiàn)場(chǎng)。
發(fā)生原因:各種各樣云石,需要具體情況具體分析唉工。
4.系統(tǒng)服務(wù)崩潰(System Server Crash):
發(fā)生場(chǎng)景:系統(tǒng)服務(wù)是Android核心進(jìn)程,此服務(wù)進(jìn)程發(fā)生崩潰汹忠。
崩潰癥狀:手機(jī)重啟到Android啟動(dòng)界面
發(fā)生原因:(1)系統(tǒng)服務(wù)看門(mén)狗發(fā)現(xiàn)異常淋硝。(2)系統(tǒng)服務(wù)發(fā)生未捕獲異常。(3)OOM宽菜。(4)系統(tǒng)服務(wù)Native發(fā)生Tombstone谣膳。
5.Kernel Panics:
發(fā)生場(chǎng)景:Linux內(nèi)核發(fā)生嚴(yán)重錯(cuò)誤
崩潰癥狀:手機(jī)從bootloader開(kāi)始完全重啟
發(fā)生原因:(1)Linux內(nèi)核內(nèi)存空間發(fā)生內(nèi)存崩潰。(2)內(nèi)核看門(mén)狗發(fā)現(xiàn)異常铅乡。(3)空指針操作內(nèi)核继谚。