Android Framework學習之如何檢查線程的耗時任務

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

檢測機制

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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容