怎么檢查線程有耗時任務?

檢測機制
????WatchDog:framework自帶機制,檢測SystemServer里的系統(tǒng)服務是否正常(是否死鎖,系統(tǒng)服務的工作線程是否還能處理新的消息等),主要檢測死鎖或線程異常情況,如果發(fā)現(xiàn)異常的話,SystemServer進程會被殺掉,重啟android系統(tǒng)
BlockCanary:開源框架,檢測線程是否有耗時任務,知道線程處理每個消息所花的時間,
WatchDog是干什么的?
1. 檢測是否發(fā)生了死鎖
針對鎖,而不是某個具體線程
2. 檢測線程是否被任務blocked
要檢查哪個線程就將這個線程的Looper加到WatchDog里,他會幫你定時的檢測
WatchDog代碼實現(xiàn)

WatchDog可以同時檢測很多線程,很多鎖,所以它一個單例就搞定所有任務

每個HandlerChecker對應一個線程,這些線程都是SystemServer里面很重要的線程


BinderThreadMonitor:用于檢測binder線程是否正常



isPolling(): 表示線程正處于休眠狀態(tài)



重要的系統(tǒng)服務是如何將自己添加到WatchDog里的


MonitorCheck 主要是用來檢測AMS,WMS,PMS等服務是否有發(fā)生死鎖
同時,這些系統(tǒng)服務還用自己的工作線程創(chuàng)建一個HandlerCheck也注冊到WatchDog
BlockCanary原理
