<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 10.6 PowerManager(電源服務) ## 本節引言: > 本節要講解的是Android為我們提供的系統服務中的——**PowerManager(電源服務)**,用于 管理CPU運行,鍵盤或屏幕亮起來;不過,除非迫不得已,否則進來別去使用這個類,假如 你使用以后,一定要及時釋放!本節并不會太深入滴去講解這B,因為這涉及到底層的一些 東西,以后需要用到在深入研究~本節主要介紹的是一些基本的概念,PowerManager,wakelock 鎖的機制等! > > 官方API文檔:[PowerManager](http://androiddoc.qiniudn.com/reference/android/os/PowerManager.html) ## 1.PowerManager是什么 > Android系統為我們提供的電源管理的一個API,其相關接口與設備電池的續航能力有很大的關聯, 官方也說了,除非是迫不得已吧,不然的話,應該盡量避免使用這個類,并且使用完以后一定要及時釋放! > > 所謂的電源管理包括:CPU運行,鍵盤或者屏幕亮起來!核心其實就是**wakelock鎖**機制,只要我們拿著這個鎖, 那么系統就無法進入休眠狀態,可以給用戶態程序或內核獲取到!鎖可以是:"**有超時的**"或者 "**沒有超時**",超時的鎖到時間后會自動解鎖,如果沒有了鎖或超時,內核會啟動休眠機制來進入休眠! ## 2.wakelock鎖介紹 > **PowerManager.WakeLock**有**加鎖**與**解鎖**兩種狀態,而加鎖的形式有兩種: > > ①**永久鎖住**,這種鎖除非顯式的放開,否則是不會解鎖的,所以用起來需要非常小心! > > ②**超時鎖**,到時間后就會解鎖,而創建WakeLock后,有**兩種加鎖機制**: **①不計數鎖機制**,**②計數鎖機制(默認)** 可通過**setReferenceCounted**(boolean value)來指定,區別在于: 前者無論**acquire**( )多少次,一次**release**( )就可以解開鎖。 而后者則需要**(--count == 0)**的時候,同樣當**(count == 0)**才會去申請鎖 所以,**WakeLock**的計數機制并不是正真意義上對每次請求進行申請/釋放一個鎖; 只是對同一把鎖被**申請/釋放**的次數來進行統計,然后再去操作! ps:關于更加深入的內容就涉及到底層的內容了,筆者水平有限,還沒到那個level, 這里就不深入研究了,就說一些基本的吧,以后有需要的話,再另開一篇吧~ ## 3.PowerManager怎么用 ``` 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條件中循環,這個可以用來降低閃爍 ## 4.需要的權限 要進行電源的操作需要在AndroidManifest.xml中聲明該應用有設置電源管理的權限: ``` <uses-permission android:name="android.permission.WAKE_LOCK"/> ``` 你可能還需要: ``` <uses-permission android:name="android.permission.DEVICE_POWER"/> ``` 另外WakeLock的設置是**Activity級別**的,而不是針對整個Application應用的! ## 本節小結: > 好的,本節介紹了PowerManager(電源服務),不過僅僅是科普一下而已,內容也說了 不到迫不得已盡量別使用這個類~看懂了,或者沒看懂都沒關系,知道下即可!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看