Android Framework学习之如何检查线程的耗时任务
2023-01-05 本文已影响0人
一只二凡子
怎么检查线程有耗时任务?
检测机制
WatchDog:framework自带机制,检测SystemServer里的系统服务是否正常(是否死锁,系统服务的工作线程是否还能处理新的消息等),主要检测死锁或线程异常情况,如果发现异常的话,SystemServer进程会被杀掉,重启android系统
BlockCanary:开源框架,检测线程是否有耗时任务,知道线程处理每个消息所花的时间,
WatchDog是干什么的?
1. 检测是否发生了死锁
针对锁,而不是某个具体线程
2. 检测线程是否被任务blocked
要检查哪个线程就将这个线程的Looper加到WatchDog里,他会帮你定时的检测
WatchDog代码实现
WatchDog可以同时检测很多线程,很多锁,所以它一个单例就搞定所有任务
每个HandlerChecker对应一个线程,这些线程都是SystemServer里面很重要的线程
BinderThreadMonitor:用于检测binder线程是否正常
isPolling(): 表示线程正处于休眠状态
重要的系统服务是如何将自己添加到WatchDog里的
MonitorCheck 主要是用来检测AMS,WMS,PMS等服务是否有发生死锁
同时,这些系统服务还用自己的工作线程创建一个HandlerCheck也注册到WatchDog
BlockCanary原理