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原理

上一篇下一篇

猜你喜欢

热点阅读