| 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[10],{284:function(e,r,t){"use strict";t.r(r);var a=t(14),v=Object(a.a)({},(function(){var e=this,r=e._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h4",{attrs:{id:"anr定位和修正"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#anr定位和修正"}},[e._v("#")]),e._v(" ANR定位和修正")]),e._v(" "),r("p",[e._v("如果开发机器上出现问题,我们可以通过查看/data/anr/traces.txt即可,最新的ANR信息在最开始部分。")]),e._v(" "),r("ul",[r("li",[r("p",[e._v("主线程被IO操作(从4.0之后网络IO不允许在主线程中)阻塞。")])]),e._v(" "),r("li",[r("p",[e._v("主线程中存在耗时的计算")])]),e._v(" "),r("li",[r("p",[e._v("主线程中错误的操作,比如Thread.wait或者Thread.sleep等\nAndroid系统会监控程序的响应状况,一旦出现下面两种情况,则弹出ANR对话框")])]),e._v(" "),r("li",[r("p",[e._v("应用在5秒内未响应用户的输入事件(如按键或者触摸)")])]),e._v(" "),r("li",[r("p",[e._v("BroadcastReceiver未在10秒内完成相关的处理")])]),e._v(" "),r("li",[r("p",[e._v("Service在特定的时间内无法处理完成 20秒")])]),e._v(" "),r("li",[r("p",[e._v("使用AsyncTask处理耗时IO操作。")])]),e._v(" "),r("li",[r("p",[e._v("使用Thread或者HandlerThread时,调用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)设置优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同。")])]),e._v(" "),r("li",[r("p",[e._v("使用Handler处理工作线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程。")])]),e._v(" "),r("li",[r("p",[e._v("Activity的onCreate和onResume回调中尽量避免耗时的代码")])]),e._v(" "),r("li",[r("p",[e._v("BroadcastReceiver中onReceive代码也要尽量减少耗时,建议使用IntentService处理。")])])])])}),[],!1,null,null,null);r.default=v.exports}}]); |