android4.4系統LoadAverageService服務分析
在前一段時間寫的《android系統cpu資源相關查詢》感覺還比較實用,上次沒有對LoadAverageService做深入一點的分析,今天我們接着來看看。
首先看看大智慧低調的LoadAverageService的源代碼小心翼翼的潛伏在android\frameworks\base\packages\SystemUI\src\com\android\systemui下面, 檔案很小,也就12KB樣子。放在systemui裡面還是有好處的,被其他程式替代的可能性低一些,一般裝置很少有人去替換systemui的,launcher被換的倒是大有人在,比較隐蔽,因為不常用也不用太顯眼;
/*****************************************************************************************************/
聲明:本博内容均由http://blog.csdn.net/edsam49原創,轉載請注明出處,謝謝!
LoadAverageService有兩個重要的class,一個是CpuTracker,負責運作狀态資料收集的,另外一個就是LoadView,從名字上也能看出是為了顯示的,要顯示成啥樣,就在這裡面了。
private static final class CpuTracker extends ProcessCpuTracker { }
private class LoadView extends View {}
我們從上面這中關系中可以看出ProcessCpuTracker是至關重要的,那麼下面我們來看看它都提供了些什麼。首先還是先了解一下linux特性,在系統運作時在/proc僞檔案系統中會生成對應任務的PID相關運作資訊,這個PID也是核心負責配置設定的,我們進入看看是個什麼樣子,如下圖:
我們再進一級,比如PID是2121的程序,我們看看他的運作stat記錄,如下圖:
有了上面說的這些素材,ProcessCpuTracker就有活幹了,我們先來看一下其中一個重要的接口getCpuTimeForPid(int pid),代碼如下:
要實時不斷的顯示重新整理出來,無法是有個任務隔一段時間去采樣一下,計算出來結果update上去,再通過LoadView來顯示。LoadView值得一提的就是它在任何應用界面上都可以顯示,它是用的系統層,而不是activities層,始終高于activities。我們看看是怎麼實作的,核心代碼如下:
用的是TYPE_SECURE_SYSTEM_OVERLAY這個參數來指定的,這個參數的介紹參考如下:
其實,通過以上的一些簡單分析,梳理一下思路,我們就可以了解到它從下到上是怎麼運作起來的。它山之石可以攻玉!為我所用,靈活使用,事半功倍!