常见anr
input,点击事件:5秒;
contentprovider:10秒;
Broadcast:前台10秒,后台60秒;
服务 service:前台20秒,后台200秒
原理
埋炸弹和拆炸弹
当启动service的时候,会调用
scheduleCreateService方法创建service
app.thread.scheduleCreateService(r, r.serviceInfo,
mAm.compatibilityInfoForPackageLocked(r.serviceInfo.applicationInfo),
app.repProcState);
在创建过程中,利用handler发送延时消息,预埋炸弹
mAm.mHandler.sendMessageDelayed(msg, proc.execServicesFg ? SERVICE_TIMEOUT : SERVICE_BACKGROUND_TIMEOUT);
如果在延时时间内完成对应的操作,则handler会移除掉刚才的延时消息,拆除炸弹
mAm.mHandler.removeMessages(ActivityManagerService.SERVICE_TIMEOUT_MSG, r.app);
这种利用handler的延迟消息,埋炸