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)中盡量避免耗時操作