最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android如何獲取當前CPU頻率和占用率

 更新時間:2025年03月12日 16:00:54   作者:microhex  
最近在優(yōu)化 App 的性能,需要獲取當前 CPU視頻頻率和占用率,所以本文小編就來和大家總結一下如何在Android中獲取當前CPU頻率和占用率吧

最近在優(yōu)化 App 的性能,需要獲取當前 CPU視頻頻率和占用率,通過查詢資料,大致思路如下:

目前沒有標準的 API 來獲取 CPU 的使用頻率,只能通過讀取指定 CPU 文件獲取當前 CPU 頻率,在某些機器或者特定版本中,可能需要ROOT 權限或者特殊權限,因此會存在一定幾率的失敗,因此需要做好 Try…catch 動作。又因為現(xiàn)在手機 CPU 的多核數目,因此我們可能需要獲取多個 CPU 頻率數,并取平均值。

獲取系統(tǒng) CPU 核心數:

 val cpuCoreNum = Runtime.getRuntime().availableProcessors()

獲取指定 CPU 當前頻率:

/sys/devices/system/cpu/cpu${index}/cpufreq/scaling_cur_freq

那么核心代碼為:

private fun getAllCpuCoreFrequency() : Long {

        var frequency = 0L

        for (index in 0 until  cpuCoreNum){
            frequency += readFile("/sys/devices/system/cpu/cpu$index/cpufreq/scaling_cur_freq")
        }

        BLog.d("frequency : $frequency")

        return frequency / cpuCoreNum
    }


  private fun readFile(filePath: String): Long{
        try {
            val file = RandomAccessFile(filePath, "r")
            val content = file.readLine()
            file.close()

            if (TextUtils.isEmpty(content)){
                return 0L
            }

            BLog.d("readFile content : $content")

            return content.trim().toLong()

        }catch (e : Exception){
            e.printStackTrace()

           return 0L
        }
    }

如果需要獲取 CPU 的占用率,那么就需要知道每個核心的最大頻率和最小頻率,同樣是通過文件獲取:

//max frequency file
/sys/devices/system/cpu/cpu${index}/cpufreq/cpuinfo_max_freq

???????//min frequency file
/sys/devices/system/cpu/cpu${index}/cpufreq/cpuinfo_min_freq

那么核心代碼為:

object CPUUtils {

    private var cpuCoreNum = 0
    private var cpuMaxFrequency = 0L
    private var cpuMinFrequency = 0L

    fun initCpuCoreNum(){
        if (cpuCoreNum <= 0 || cpuMaxFrequency <= 0L || cpuMinFrequency <= 0L){

            cpuCoreNum = Runtime.getRuntime().availableProcessors()
            initMaxAndMinFrequency()

            if (cpuCoreNum > 0 && cpuMaxFrequency > 0L && cpuMinFrequency > 0L){
               SpManager.getInstance().setCanUseCPUFrequency(true)
            }
        }

        BLog.d("cpuCoreNum : $cpuCoreNum")
    }

    private fun initMaxAndMinFrequency()  {
        if (cpuCoreNum <= 0){
            return
        }

        cpuMaxFrequency = 0L
        cpuMinFrequency = 0L

        for (index in 0 until cpuCoreNum){
            cpuMaxFrequency += readFile("/sys/devices/system/cpu/cpu${index}/cpufreq/cpuinfo_max_freq")
            cpuMinFrequency += readFile("/sys/devices/system/cpu/cpu${index}/cpufreq/cpuinfo_min_freq")
        }


        BLog.d("cpuMaxFrequency : $cpuMaxFrequency, cpuMinFrequency : $cpuMinFrequency")
    }


    private fun readFile(filePath: String): Long{
        try {
            val file = RandomAccessFile(filePath, "r")
            val content = file.readLine()
            file.close()

            if (TextUtils.isEmpty(content)){
                return 0L
            }

            BLog.d("readFile content : $content")

            return content.trim().toLong()

        }catch (e : Exception){
           ExceptionHandler.recordException(e)

           return 0L
        }
    }
    
    private fun getAllCpuCoreFrequency() : Long {
        initCpuCoreNum()

        if (cpuCoreNum <=0){
            return 0L
        }

        var frequency = 0L

        for (index in 0 until  cpuCoreNum){
            frequency += readFile("/sys/devices/system/cpu/cpu$index/cpufreq/scaling_cur_freq")
        }

        BLog.d("frequency : $frequency")

        return frequency
    }

    fun findCurrentFrequencyPercent() : Long {

        val currentFrequency = getAllCpuCoreFrequency()

        BLog.d("currentFrequency : $currentFrequency, cpuMinFrequency : $cpuMinFrequency, cpuMaxFrequency : $cpuMaxFrequency")

        if (cpuMaxFrequency - cpuMinFrequency <= 0L || currentFrequency - cpuMinFrequency < 0L || cpuMaxFrequency - currentFrequency < 0L){
            return 0L
        }

        return (currentFrequency - cpuMinFrequency) * 100 / (cpuMaxFrequency - cpuMinFrequency)
    }


    fun getCpuCoreFrequency() : Long {
        initCpuCoreNum()

        if (cpuCoreNum <=0){
            return 0L
        }

        return getAllCpuCoreFrequency() / cpuCoreNum
    }

}

獲取 CPU 頻率:

CPUUtils.getCpuCoreFrequency()

獲取 CPU 占用率:

CPUtils.findCurrentFrequencyPercent()

到此這篇關于Android如何獲取當前CPU頻率和占用率的文章就介紹到這了,更多相關Android獲取CPU頻率和占用率內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Android應用中使用ViewPager實現(xiàn)類似QQ的界面切換效果

    Android應用中使用ViewPager實現(xiàn)類似QQ的界面切換效果

    這篇文章主要介紹了Android應用中使用ViewPager實現(xiàn)類似QQ的界面切換效果的示例,文中的例子重寫了PagerAdapter,并且講解了如何解決Android下ViewPager和PagerAdapter中調用notifyDataSetChanged失效的問題,需要的朋友可以參考下
    2016-03-03
  • 詳解App?;顚崿F(xiàn)原理

    詳解App?;顚崿F(xiàn)原理

    一直以來,App 進程?;疃际歉鞔髲S商,特別是頭部應用開發(fā)商永恒的追求。畢竟App 進程死了,就什么也干不了了;一旦 App 進程死亡,那就再也無法在用戶的手機上開展任何業(yè)務,所有的商業(yè)模型在用戶側都沒有立足之地
    2021-06-06
  • Android 仿微信朋友圈點贊和評論彈出框功能

    Android 仿微信朋友圈點贊和評論彈出框功能

    這篇文章主要介紹了Android 仿微信朋友圈點贊和評論彈出框功能的相關資料,非常不錯,具有參考解決價值,需要的朋友可以參考下
    2016-11-11
  • Android App在線程中創(chuàng)建handler的方法講解

    Android App在線程中創(chuàng)建handler的方法講解

    這篇文章主要介紹了Android App在線程中創(chuàng)建handler的方法講解,文中同時講解了handler和線程的關系以及使用Handler時一些需要注意的地方,需要的朋友可以參考下
    2016-03-03
  • Android中制作自定義dialog對話框的實例分享

    Android中制作自定義dialog對話框的實例分享

    這篇文章主要介紹了Android中制作自定義dialog對話框的實例分享,安卓自帶的Dialog顯然不夠用,因而我們要繼承Dialog類來制作自己的對話框,需要的朋友可以參考下
    2016-04-04
  • 獲取Android界面性能數據的快捷方法

    獲取Android界面性能數據的快捷方法

    這篇文章主要介紹了獲取Android界面性能數據的快捷方法,幫助大家更好的理解和學習使用Android開發(fā),感興趣的朋友可以了解下
    2021-04-04
  • Android TextView前增加紅色必填項星號*的示例代碼

    Android TextView前增加紅色必填項星號*的示例代碼

    TextView是一個完整的文本編輯器,但是基類為不允許編輯,其子類EditText允許文本編輯,這篇文章主要介紹了Android TextView前增加紅色必填項星號*的示例代碼,需要的朋友可以參考下
    2024-03-03
  • Android 使用手機NFC的讀取NFC標簽數據的方法

    Android 使用手機NFC的讀取NFC標簽數據的方法

    這篇文章主要介紹了Android 使用手機NFC的讀取NFC標簽數據的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • android編程之XML文件解析方法詳解(附源碼)

    android編程之XML文件解析方法詳解(附源碼)

    這篇文章主要介紹了android編程之XML文件解析方法,結合實例形式較為詳細的分析了Android解析XML文件的sax、pull及Dom三種方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Android UI設計與開發(fā)之ViewPager介紹和簡單實現(xiàn)引導界面

    Android UI設計與開發(fā)之ViewPager介紹和簡單實現(xiàn)引導界面

    這篇文章主要為大家詳細介紹了Android UI設計與開發(fā)之ViewPager介紹和簡單實現(xiàn)引導界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評論

丽江市| 汝南县| 田阳县| 三穗县| 宁蒗| 兰考县| 洪泽县| 宁蒗| 日喀则市| 西华县| 彩票| 钟祥市| 留坝县| 鄄城县| 合山市| 藁城市| 通化市| 隆回县| 江陵县| 荣成市| 邓州市| 海南省| 梧州市| 商水县| 岳阳市| 开封县| 朔州市| 宝应县| 阳高县| 永仁县| 寿宁县| 湖州市| 石河子市| 达孜县| 咸宁市| 方山县| 苏尼特左旗| 五河县| 乌苏市| 满洲里市| 鲁甸县|