ANR

application not responding

一、什么是ANR?

應(yīng)用程序無響應(yīng)的對話框(主線程耗時操作)

二、ANR產(chǎn)生的主要原因

1.主線程做了耗時的IO操作(Android4.0以上網(wǎng)絡(luò)io不允許在主線程中,會直接報異常)阻塞

2.主線程做耗時操作


5秒內(nèi)無法響應(yīng)用戶的輸入時間(activity,service)

broadcastreceiver10秒鐘無法結(jié)束


Android中哪些操作在主線程中?

1.activity所有生命周期

2.service默認(rèn)執(zhí)行在主線程

3.broadcastreceiver的onreceive回調(diào)

4.沒有使用子線程的looper的handler的handlemessage,post(runnable) 關(guān)聯(lián)主線程的looper

5.asynctask的回調(diào)除了doinbackground,其他都執(zhí)行在主線程。

三、解決ANR

1.使用asynctask中處理耗時操作 IO

2.使用thread或handlerthread提高優(yōu)先級( handlerthread可以在子線程中創(chuàng)建handler發(fā)送消息,內(nèi)部創(chuàng)建了looper關(guān)聯(lián)了消息隊列)

3.使用handler處理工作線程中的耗時任務(wù)(handler子線程靈活地發(fā)送消息給主線程)

4.Activity的onCreate和onResume回調(diào)中盡量避免耗時操作

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

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

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