編輯:關於Android編程
本節要講解的是Android為我們提供的系統服務中的——PowerManager(電源服務),用於
管理CPU運行,鍵盤或屏幕亮起來;不過,除非迫不得已,否則進來別去使用這個類,假如
你使用以後,一定要及時釋放!本節並不會太深入滴去講解這B,因為這涉及到底層的一些
東西,以後需要用到在深入研究~本節主要介紹的是一些基本的概念,PowerManager,wakelock
鎖的機制等!
官方API文檔:PowerManager
Android系統為我們提供的電源管理的一個API,其相關接口與設備電池的續航能力有很大的關聯,
官方也說了,除非是迫不得已吧,不然的話,應該盡量避免使用這個類,並且使用完以後一定要及時釋放!
所謂的電源管理包括:CPU運行,鍵盤或者屏幕亮起來!核心其實就是wakelock鎖機制,只要我們拿著這個鎖,
那麼系統就無法進入休眠狀態,可以給用戶態程序或內核獲取到!鎖可以是:”有超時的“或者
“沒有超時“,超時的鎖到時間後會自動解鎖,如果沒有了鎖或超時,內核會啟動休眠機制來進入休眠!
PowerManager.WakeLock有加鎖與解鎖兩種狀態,而加鎖的形式有兩種:
①永久鎖住,這種鎖除非顯式的放開,否則是不會解鎖的,所以用起來需要非常小心!
②超時鎖,到時間後就會解鎖,而創建WakeLock後,有兩種加鎖機制:
①不計數鎖機制,②計數鎖機制(默認)
可通過setReferenceCounted(boolean value)來指定,區別在於:
前者無論acquire( )多少次,一次release( )就可以解開鎖。
而後者則需要(–count == 0)的時候,同樣當(count == 0)才會去申請鎖
所以,WakeLock的計數機制並不是正真意義上對每次請求進行申請/釋放一個鎖;
只是對同一把鎖被申請/釋放的次數來進行統計,然後再去操作!
ps:關於更加深入的內容就涉及到底層的內容了,筆者水平有限,還沒到那個level,
這裡就不深入研究了,就說一些基本的吧,以後有需要的話,再另開一篇吧~
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock w1 = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, MyTag);
w1.acquire();
//在這個過程,屏幕會保持光亮!
w1.release();
上述newWakeLock( )的第一個flag標記,這些標記不同程度的影響系統電源.
這些標記都是獨占的,並且每次只能指定其中一個。
PARTIAL_WAKE_LOCK:保持CPU 運轉,屏幕和鍵盤燈有可能是關閉的。
SCREEN_DIM_WAKE_LOCK:保持CPU 運轉,允許保持屏幕顯示但有可能是灰的,允許關閉鍵盤燈
SCREEN_BRIGHT_WAKE_LOCK:保持CPU 運轉,允許保持屏幕高亮顯示,允許關閉鍵盤燈
FULL_WAKE_LOCK:保持CPU 運轉,保持屏幕高亮顯示,鍵盤燈也保持亮度
ps:如果你使用的是局部喚醒鎖的話(使用PARTIAL_WAKE_LOCK標志),CPU會繼續運行,
將忽略任何的計時器,甚至按下電源按鈕。其他的喚醒鎖話,CPU也會繼續運轉,但是使用者仍
然可以按電源按鈕讓設備睡眠。另外,你可以使用兩個以上的標記,但是他只影響屏幕的行為。
和 PARTIAL_WAKE_LOCK 同時使用的話,沒有任何影響。
屏幕解鎖參數:
ACQUIRE_CAUSES_WAKEUP:正常喚醒鎖實際上並不打開照明。相反,一旦打開他們會一直仍然
保持(例如來世user的activity)。當獲得wakelock,這個標志會使屏幕或/和鍵盤立即打開。
一個典型的使用就是可以立即看到那些對用戶重要的通知。
ON_AFTER_RELEASE:設置了這個標志,當wakelock釋放時用戶activity計時器會被重置,導致照明
持續一段時間。如果你在wacklock條件中循環,這個可以用來降低閃爍
要進行電源的操作需要在AndroidManifest.xml中聲明該應用有設置電源管理的權限:
你可能還需要:
另外WakeLock的設置是Activity級別的,而不是針對整個Application應用的!
好的,本節介紹了PowerManager(電源服務),不過僅僅是科普一下而已,內容也說了
不到迫不得已盡量別使用這個類~看懂了,或者沒看懂都沒關系,知道下即可!
自定義view的第三篇,模仿的是微博運動界面的個人出生日期設置view,先看看我的效果圖: 支持設置初始年份,左右滑動選擇出生年份,對應的TextView的值也會改變。這
您應該始終外部化應用資源,例如圖像和代碼中的字符串,這樣有利於您單獨維護這些資源。 此外,您還應該為特定設備配置提供備用資源,方法是將它們分組到專門命名的資源目錄中。 在
注:本文是我早些時候在eoe上發布的一篇文章 由於每個應用程序都運行在自己的進程空間,並且可以從應用程序UI運行另一個服務進程,而且經常會在不同的進程間傳遞對象
android不同的版本引入的actionbar有差異,現總結如下一、在support.v7包中引入布局使用onCreateOptionsMenu方法中的參數:infla