版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、千鋒千鋒3G嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心 Android開發(fā)教程之電源管理相關(guān)應(yīng)用技開發(fā)教程之電源管理相關(guān)應(yīng)用技 巧巧 Android電源管理應(yīng)用層的使用電源管理應(yīng)用層的使用 Android Framework層面層面 Kernel層層 提供給提供給Android Framework層的層的proc 電源管理之Wake lock 在在Kernel層使用層使用wake lock 1 Android開發(fā)教程之電源管理相關(guān)應(yīng)用技 巧 千鋒千鋒3G嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心嵌入式移動互聯(lián)網(wǎng)技術(shù)研
2、發(fā)中心 簡介 對于剛剛接觸Android操作系統(tǒng)的朋友來說, 他們對這一開源的手機操作系統(tǒng)所帶來的 功能深深的吸引著。我們在這篇文章中就 通過對Android電源管理的相關(guān)概念的解讀, 來對這一系統(tǒng)進行深入的了解。 接下來我們從Java應(yīng)用層面, Android framework層面, Linux內(nèi)核層面分別進行詳 細的討論: 2 Android開發(fā)教程之電源管理相關(guān)應(yīng)用技 巧 千鋒千鋒3G嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心 www.mobiletrain
3、.org Android開發(fā)教程之電源管理應(yīng)用層的使用開發(fā)教程之電源管理應(yīng)用層的使用 Android提供了現(xiàn)成android.os.PowerManager 類,該類用于控制設(shè)備的電源狀態(tài)的切換. 該類對外有三個接口函數(shù): 1.void goToSleep(long time); /強制設(shè)備進入Sleep狀態(tài) Note: 嘗試在應(yīng)用層調(diào)用該函數(shù),卻不能成功,出 現(xiàn)的錯誤好象是權(quán)限不夠, 但在Framework下 面的Service里調(diào)用是可以的. 3 Android開發(fā)教程之電源管理相關(guān)應(yīng)用技 巧 千鋒千鋒3G嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心 www.embedtrai
4、 Android開發(fā)教程開發(fā)教程 2.newWakeLock(int flags, String tag);/取得相應(yīng)層次的鎖 flags參數(shù)說明: 3.PARTIAL_WAKE_LOCK: Screen off, keyboard light off 4.SCREEN_DIM_WAKE_LOCK: screen dim, keyboard light off 5.SCREEN_BRIGHT_WAKE_LOCK: screen bright, keyboard light off 6.FULL_WAKE_LOCK: screen bright,
5、 keyboard bright ACQUIRE_CAUSES_WAKEUP: 一旦有請求鎖時強制打開 Screen和keyboard light ON_AFTER_RELEASE: 在釋放鎖時reset activity timer Note: 4 Android開發(fā)教程之電源管理相關(guān)應(yīng)用技 巧 千鋒千鋒3G嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心 Android開發(fā)教程開發(fā)教程 如果申請了partial wakelock,那么即使按Power鍵,系統(tǒng)也不會進 Sleep,如Music播放時 如果申
6、請了其它的wakelocks,按Power鍵,系統(tǒng)還是會進 Sleep 7.void userActivity(long when, boolean noChangeLights); /User activity事件發(fā)生,設(shè)備會被切換到Full on的狀態(tài), 同時Reset Screen off timer. 8.Sample code: 9.PowerManager pm = (PowerManager)getSystemService (Context.POWER_SERVICE); 5 Android開發(fā)教程之電源管理相關(guān)應(yīng)用技 巧 千鋒千鋒3G嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心嵌入式移動互聯(lián)
7、網(wǎng)技術(shù)研發(fā)中心 Android開發(fā)教程開發(fā)教程 10.PowerManager.WakeLock wl = pm.newWakeLock (PowerManager.SCREEN_DIM_WAKE_LOCK, “My Tag”); 11.wl.acquire(); 12. 13.wl.release(); Note: 1.在使用以上函數(shù)的應(yīng)用程序中,必須在其 Manifest.xml文件中加入下面的權(quán)限: 14. 6 Android開發(fā)教程之電源管理相關(guān)應(yīng)用技 巧 千鋒千鋒3G嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心嵌入式移動互
8、聯(lián)網(wǎng)技術(shù)研發(fā)中心 Android開發(fā)教程開發(fā)教程 15. 2. 所有的鎖必須成對的使用,如果申請 了而沒有及時釋放會造成系統(tǒng)故障.如申請 了partial wakelock,而沒有及時釋放,那系統(tǒng) 就永遠進不了Sleep模式. 7 Android開發(fā)教程之電源管理相關(guān)應(yīng)用技 巧 千鋒千鋒3G嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心 Android開發(fā)教程之開發(fā)教程之Framework層層 面面 其主要代碼文件如下: 16.f
9、rameworksbasecorejavaandroidos PowerManager.java 17.frameworksbaseservicesjavacomandroidserve r PowerManagerService.java 18.frameworksbasecorejavaandroidosPower.java 19.frameworksbasecorejniandroid_os_power.cpp 20.hardwarelibhardwarepowerpower.c 8 Android開發(fā)教程之電源管理相關(guān)應(yīng)用技 巧 千鋒千鋒3G嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心嵌入式移動互聯(lián)網(wǎng)
10、技術(shù)研發(fā)中心 Android開發(fā)教程開發(fā)教程 其中PowerManagerService.java是核心, Power.java 提供底層的函數(shù)接口,與JNI層進行交互, JNI層的代碼 主要在文件android_os_Power.cpp中,與Linux kernel 交互是通過Power.c來實現(xiàn)的, Android電源管理跟 Kernel的交互主要是通過sys文件的方式來實現(xiàn)的,具 體請參考Kernel層的介紹. 這一層的功能相對比較復(fù)雜,比如系統(tǒng)狀態(tài)的切 換,背光的調(diào)節(jié)及開關(guān),Wake Lock的申請和釋放等等
11、, 但這一層跟硬件平臺無關(guān),而且由Google負責維護,問 題相對會少一些,有興趣的朋友可以自己查看相關(guān)的 代碼. 9 Android開發(fā)教程之電源管理相關(guān)應(yīng)用技 巧 千鋒千鋒3G嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心 Android開發(fā)教程之開發(fā)教程之Kernel層層 其主要代碼在下列位置: 21.drivers/android/power.c 其對Kernel提供的接口函數(shù)有 22.EXPORT_SYMBOL(android_init_suspend_lock); /初始化Suspend loc
12、k,在使用前必須做初始化 23.EXPORT_SYMBOL(android_uninit_suspend_lock); /釋放suspend lock相關(guān)的資源 24.EXPORT_SYMBOL(android_lock_suspend); /申請lock,必須調(diào)用相應(yīng)的unlock來釋放它 25.EXPORT_SYMBOL(android_lock_suspend_auto_expire); 10 Android開發(fā)教程之電源管理相關(guān)應(yīng)用技 巧 千鋒千鋒3G嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心
13、Android開發(fā)教程開發(fā)教程 /申請partial wakelock, 定時時間到后會自動釋放 26.EXPORT_SYMBOL(android_unlock_suspend); / 釋放lock 27.EXPORT_SYMBOL(android_power_wakeup); / 喚醒系統(tǒng)到on 28.EXPORT_SYMBOL(android_register_early_suspend); /注冊early suspend的驅(qū)動 29.EXPORT_SYMBOL(android_unregister_early_suspen d); /取消已經(jīng)注冊的early suspend的驅(qū)動 11
14、 Android開發(fā)教程之電源管理相關(guān)應(yīng)用技 巧 千鋒千鋒3G嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心 提供給提供給Android Framework層的層的proc文件文件 30./sys/android_power/acquire_partial_wake_lock /申請partial wake lock 31./sys/android_power/acquire_full_wake_lock /申請full wake lock 32./sys/android_power/release_wak
15、e_lock /釋放相應(yīng)的wake lock 33./sys/android_power/request_state /請求改變系統(tǒng)狀態(tài),進standby和回到wakeup兩種 狀態(tài) 34./sys/android_power/state /指示當前系統(tǒng)的 狀態(tài) 12 Android開發(fā)教程之電源管理相關(guān)應(yīng)用技 巧 千鋒千鋒3G嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心 電源管理之Wake lock Android電源管理主要是通過Wake lock來實現(xiàn)的,在最 底層主要是通過如下三個隊列來實現(xiàn)其管理
16、: 35.static LIST_HEAD(g_inactive_locks); 36.static LIST_HEAD(g_active_partial_wake_locks); 37.static LIST_HEAD(g_active_full_wake_locks); 所有初始化后的lock都會被插入到g_inactive_locks 的隊列中,而當前活動的partial wake lock都會被插入到 g_active_partial_wake_locks隊列中, 活動的full wake lock 被插入到g_active_full_wake_locks隊列中, 所有的partial
17、 wake lock 和full wake lock在過期后或unlock后都會被移 到inactive的隊列,等待下次的調(diào)用. 13 Android開發(fā)教程之電源管理相關(guān)應(yīng)用技 巧 千鋒千鋒3G嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心嵌入式移動互聯(lián)網(wǎng)技術(shù)研發(fā)中心 Android開發(fā)教程之在開發(fā)教程之在Kernel層使用層使用wake lock 1. 調(diào)用函數(shù)android_init_suspend_lock初始化一個wake lock 2. 調(diào)用相關(guān)申請lock的函數(shù)android_lock_suspend 或 android_lock_suspend_auto_expire請求lock,這里只能申請partial wake lock, 如果要申請Full wake lock,則需要調(diào)用函數(shù) android_lock_partial_suspend_auto_e
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年七年級歷史下冊 第16課 明朝的科技、建筑與文學說課稿 新人教版
- 2025瓷磚買賣合同
- Unit 3 Family Matters Understanding ideas Like Father,Like Son 說課稿 -2024-2025學年高中英語外研版(2019)必修第一冊
- 2024-2025學年高中語文 第三課 第4節(jié) 咬文嚼字-消滅錯別字說課稿2 新人教版選修《語言文字應(yīng)用》
- 21 古詩三首 第一課時 說課稿-2024-2025學年統(tǒng)編版語文四年級上冊
- 2025購銷合同范本
- 森林安全監(jiān)管方案
- 企業(yè)派駐合同范例
- 網(wǎng)狀吊索拱橋施工方案
- 黔東南綠化草坪施工方案
- 慢性腎衰竭的護理課件
- 2024-2025學年河南省鄭州市高二上期期末考試數(shù)學試卷(含答案)
- 甲流乙流培訓(xùn)課件
- 兒科學川崎病說課
- 2025《省建設(shè)工程檔案移交合同書(責任書)》
- 2025年云南農(nóng)墾集團總部春季社會招聘(9人)管理單位筆試遴選500模擬題附帶答案詳解
- 《石油鉆井基本知識》課件
- 電力兩票培訓(xùn)
- TCCEAS001-2022建設(shè)項目工程總承包計價規(guī)范
- 四百字作文格子稿紙(可打印編輯)
- 新概念二冊課文電子版
評論
0/150
提交評論