亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android實現(xiàn)電池管理系統(tǒng)

 更新時間:2018年01月12日 08:43:44   作者:大繁至簡  
這篇文章主要為大家詳細介紹了Android實現(xiàn)電池管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、Android 電池服務

Android電池服務,用來監(jiān)聽內(nèi)核上報的電池事件,并將最新的電池數(shù)據(jù)上報給系統(tǒng),系統(tǒng)收到新數(shù)據(jù)后會去更新電池顯示狀態(tài)、剩余電量等信息。如果收到過溫報警和低電報警,系統(tǒng)會自動觸發(fā)關機流程,保護電池和機器不受到危害。

Android電池服務的啟動和運行流程:

Android

電池服務的源碼結(jié)構(gòu)

 Framework\base\services\java\com\android\server
        ├── SystemServer.java
                 創(chuàng)建BatteryServices、PowerManagerService、ActivityManagerService
        ├── BatterySevices.java
                 監(jiān)聽底層上報的battery事件,廣播電池發(fā)生改變的消息
         Framework\base\services\java\com\android\server\am
        ├── ActivityManagerService.java
                 創(chuàng)建BatteryStatsService
        ├── BatteryStatsService.java
                 統(tǒng)計和記錄電池參數(shù)的信息
         Framework\base\services\java\com\android\server\power
        ├── PowerManagerService.java
                 監(jiān)聽電池發(fā)生變化的廣播消息,并調(diào)節(jié)系統(tǒng)的電源狀態(tài),例如亮屏
         Framework\base\core\java\com\internal\os\
        ├── BatteryStatsImpl.java
                 統(tǒng)計和記錄電池參數(shù)的信息,并通知其他模塊
         System\core\healthd
        ├── healthd.cpp
                 創(chuàng)建uevent socket,監(jiān)聽內(nèi)核上報的內(nèi)核事件
        ├── BatteryMonitor.cpp
                 初始化本地電池數(shù)據(jù)結(jié)構(gòu),將power_supply路徑下屬性節(jié)點路徑填充進去,
        ├── BatteryMonitor.h
        ├── BatteryPropertiesRegistrar.cpp
                 創(chuàng)建電池屬性監(jiān)聽器,并將其注冊到Android的系統(tǒng)服務中
        ├── BatteryPropertiesRegistrar.h

二、Healthd

該模型向下監(jiān)聽來自底層的電池事件,向上傳遞電池數(shù)據(jù)信息給Framework層的BatteryService用來計算電池電量相關信息,
BatteryService通過傳遞來的數(shù)據(jù)來計算電池電量等信息,因此healthd在電池管理系統(tǒng)中起著承上啟下的作用。

healthd的具體調(diào)用流程深入分析android5.1 healthd這篇文章講得很清楚。

三、驅(qū)動

Android電源管理底層用的是Linux
 power_supply框架,內(nèi)核提供給電池驅(qū)動的接口是結(jié)構(gòu)體power_supply結(jié)構(gòu)體。

struct power_supply { 
 const char *name; 
 enum power_supply_type type; 
 enum power_supply_property *properties; 
 size_t num_properties; 
 
 char **supplied_to; 
 size_t num_supplicants; 
 
 int (*get_property)(struct power_supply *psy, 
  enum power_supply_property psp, 
  union power_supply_propval *val); 
 int (*set_property)(struct power_supply *psy, 
  enum power_supply_property psp, 
  const union power_supply_propval *val); 
 int (*property_is_writeable)(struct power_supply *psy, 
   enum power_supply_property psp); 
 void (*external_power_changed)(struct power_supply *psy); 
 void (*set_charged)(struct power_supply *psy); 
 
 /* For APM emulation, think legacy userspace. */ 
 int use_for_apm; 
 
 /* Driver private data */ 
 void *drv_data;//add by bhj 
 
 /* private */ 
 struct device *dev; 
 struct work_struct changed_work; 
 spinlock_t changed_lock; 
 bool changed; 
 struct wake_lock work_wake_lock; 
 struct delayed_work deferred_register_work; 
 
#ifdef CONFIG_LEDS_TRIGGERS 
 struct led_trigger *charging_full_trig; 
 char *charging_full_trig_name; 
 struct led_trigger *charging_trig; 
 char *charging_trig_name; 
 struct led_trigger *full_trig; 
 char *full_trig_name; 
 struct led_trigger *online_trig; 
 char *online_trig_name; 
 struct led_trigger *charging_blink_full_solid_trig; 
 char *charging_blink_full_solid_trig_name; 
#endif 
};

內(nèi)核主要通過get_property這個函數(shù)指針來獲得驅(qū)動中的有關電池的信息,而這個函數(shù)在內(nèi)核中只給出了聲明,我們在寫驅(qū)動的時候要自己實現(xiàn)這個函數(shù),即將自己寫的函數(shù)賦值給這個函數(shù)指針,當內(nèi)核需要驅(qū)動中電源信息的時候就回調(diào)這個get_property函數(shù)。另外,我們寫驅(qū)動程序的時候又要給用戶提供接口,內(nèi)核中提供給用戶的接口就是sysfs,通過讀取sysfs文件系統(tǒng)中文件內(nèi)容,就可以得到電源的信息。內(nèi)核主要通過兩個文件power_supply_class.c和power_supply_core.c,我們調(diào)用其中的函數(shù)就可以把電源(電池,USB或AC)的信息展現(xiàn)給用戶,有關電源的屬性寫在/sys/class/powersupply文件夾下(此文件夾為程序運行后所生成的)。

電池系統(tǒng)從底層向Framework層上報數(shù)據(jù)的流程:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android圖片性能優(yōu)化詳解

    Android圖片性能優(yōu)化詳解

    這篇文章給大家分享了關于Android性能優(yōu)化之圖片優(yōu)化的相關知識點內(nèi)容,有興趣的朋友參考下。
    2018-07-07
  • Android面試題問答整理

    Android面試題問答整理

    今天小編就為大家分享一篇關于Android面試題問答整理,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • android中RecycleView添加下滑到底部的監(jiān)聽示例

    android中RecycleView添加下滑到底部的監(jiān)聽示例

    本篇文章主要介紹了android中RecycleView添加下滑到底部的監(jiān)聽示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Android Studio自動提取控件Style樣式教程

    Android Studio自動提取控件Style樣式教程

    這篇文章主要介紹了Android Studio自動提取控件Style樣式教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Android框架Volley使用之Json請求實現(xiàn)

    Android框架Volley使用之Json請求實現(xiàn)

    這篇文章主要介紹了Android框架Volley使用之Json請求實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • 使用RecyclerView實現(xiàn)Item點擊事件

    使用RecyclerView實現(xiàn)Item點擊事件

    這篇文章主要介紹了使用RecyclerView實現(xiàn)Item點擊事件,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Android Studio調(diào)試功能使用匯總

    Android Studio調(diào)試功能使用匯總

    這篇文章主要為大家詳細介紹了Android Studio調(diào)試功能使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 詳解Android Handler機制和Looper Handler Message關系

    詳解Android Handler機制和Looper Handler Message關系

    Handler是Android線程之間的消息機制,主要的作用是將一個任務切換到指定的線程中去執(zhí)行,準確的說是切換到構(gòu)成Handler的looper所在的線程中去出處理。本文將詳細介紹Android Handler機制和Looper Handler Message關系。
    2021-06-06
  • 簡單實現(xiàn)Android滾動公告欄

    簡單實現(xiàn)Android滾動公告欄

    這篇文章主要為大家詳細介紹了如何簡單實現(xiàn)Android滾動公告欄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android仿京東淘寶自動無限循環(huán)輪播控件思路詳解

    Android仿京東淘寶自動無限循環(huán)輪播控件思路詳解

    在App的開發(fā)中,很多的時候都需要實現(xiàn)類似京東淘寶一樣的自動無限輪播的廣告欄,這里小編寫了一個,分享到腳本之家平臺供大家參考
    2017-04-04

最新評論