android屏幕常亮保持


相關的變量:

    PowerManager powerManager = null;
    WakeLock wakeLock = null;
初始化:

    powerManager = (PowerManager) this
                .getSystemService(Service.POWER_SERVICE);
        wakeLock = this.powerManager.newWakeLock(
                PowerManager.SCREEN_DIM_WAKE_LOCK, "My Lock");

開啟屏幕常亮:

            wakeLock.setReferenceCounted(false);
            wakeLock.acquire();

關閉你的程序設置的屏幕常亮:

            wakeLock.release();

注意的地方:我在實際的調試過程中,沒有設置wakeLock.setReferenceCounted(false);這個,報錯為:java.lang.RuntimeException: WakeLock under-locked

                 閱讀源碼:

         acquire()函數如下:

                        public void acquire()
        {
            synchronized (mToken) {
                if (!mRefCounted || mCount++ == 0) {
                    try {
                        mService.acquireWakeLock(mFlags, mToken, mTag);
                    } catch (RemoteException e) {
                    }
                    mHeld = true;
                }
            }
        }

  release()函數如下:

               public void release()
        {
            release(0);
        }

       public void release(int flags)
        {
            synchronized (mToken) {
                if (!mRefCounted || --mCount == 0) {
                    try {
                        mService.releaseWakeLock(mToken, flags);
                    } catch (RemoteException e) {
                    }
                    mHeld = false;
                }
                if (mCount < 0) {
                    throw new RuntimeException("WakeLock under-locked " + mTag);
                }
            }
        }

報錯就抱在release(int flags)中,mCount為負數了,拋除了異常

我們再看下:setReferenceCounted(boolean flags);

      public void setReferenceCounted(boolean value)
        {
            mRefCounted = value;
        }

  這個函數的作用是是不是需要計算鎖的數量,設置為false時,在release()的時候,不管你acquire()了多少回,可以releaseWakeLock掉

 網上看到很多   acquire()后直接就調用release(),誤導大家

 這個是我自己的一些看法,歡迎探討

 

                  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM