(二十四)ANR異常面試問(wèn)題

一、什么是ANR

ANR是Application Not Responding(程序未響應(yīng)),系統(tǒng)回彈出對(duì)話框讓用戶進(jìn)行等待或者關(guān)閉程序。一個(gè)Activity執(zhí)行時(shí)間超過(guò)5s,一個(gè)Service執(zhí)行時(shí)間超過(guò)10s,都會(huì)出現(xiàn)ANR。

二、造成ANR的主要原因

1.主線程中被耗時(shí)IO操作阻塞(從Android 4.0之后網(wǎng)絡(luò)IO不允許在主線程中)。

2.主線程中存在耗時(shí)的計(jì)算。

Android中的哪些操作是在主線程呢?

1.Activity的所有生命周期都是執(zhí)行在主線程的。

2.Service默認(rèn)是執(zhí)行在主線程的。

3.BroadcastReceiver的onReceive回調(diào)是執(zhí)行在主線程的。

4.沒(méi)有使用子線程的Looper的Handler的handleMessage,post(Runnable)是執(zhí)行在主線程的。

5.AsyncTask的回調(diào)方法除了doInBackground,其他都是執(zhí)行在主線程。

三、如何解決ANR

1.使用AsyncTask處理耗時(shí)IO操作。

2.使用Thread或者HandlerThread提高優(yōu)先級(jí)。

3.使用Handler來(lái)處理工作線程的耗時(shí)任務(wù)。

4.Activity的onCreate和onResume回調(diào)中盡量避免耗時(shí)的代碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容