watchdog的源码很简单,主要有两个功能
1监控system_server中几个关键的锁,原理就是在android_fg线程中尝试加锁
2监控几个常用线程的执行时间,原理就是在这几个线程中执行任务
主要监控的线程有:
1 FgThread 前台操作,优先级比较高,但是应该尽量少放任务,因为会阻塞后面的任务
2 SystemServer main线程 ui操作线程
3 UiThread 用于AMS ui创建
4 IoThread io操作
5 DisplayThread display相关操作
要监控的monitor(主要是用于获取锁),主要实现是添加montor回调,在一定时间内在fg中执行一遍所有的monitor回调函数,主要的monitor有:
1 BinderThreadMonitor 监控是否有可用的binder进程
public voidmonitor() {
Binder.blockUntilThreadAvailable();
}
2 MountService 两个daemon进程
private