Android笔记:Wake Lock
importandroid.app.Service;importandroid.content.Context;importandroid.os.PowerManager;/***WakeLock是一种锁的机制,只要有人拿着这个锁,系统就无法进入休眠,*可以被用户态程序和内核获得.这个锁可以是有超时的或者是没有超时的,*超时的锁会在时间过去以后自动解锁.如果没有锁了或者超时了,内核就*会启动休眠的那套机制来进入休眠.**一、关于intflags各种锁的类型对CPU、屏幕、键盘的影响:*1.PARTIAL_WAKE_LOCK:保持CPU运转,屏幕和键盘灯有可能是关闭的。*2.SCREEN_DIM_WAKE_LOCK:保持CPU运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯*3.SCREEN_BRIGHT_WAKE_LOCK:保持CPU运转,允许保持屏幕高亮显示,允许关闭键盘灯*4.FULL_WAKE_LOCK:保持CPU运转,保持屏幕高亮显示,键盘灯也保持亮度*5.ACQUIRE_CAUSES_WAKEUP:Normalwakelocksdon't*actuallyturnontheillumination.Instead,theycausetheilluminationto*remainononceitturnson(e.g.fromuseractivity).Thisflagwillforce*thescreenand/orkeyboardtoturnonimmediately,whentheWakeLockis*acquired.Atypicalusewouldbefornotificationswhichareimportantfor*theusertoseeimmediately.*6.ON_AFTER_RELEASE:fthisflagisset,theuser*activitytimerwillberesetwhentheWakeLockisreleased,causingthe*illuminationtoremainonabitlonger.Thiscanbeusedtoreduceflickerif*youarecyclingbetweenwakelockconditions.**你能加两个以上的标志,这些仅能影响屏幕的行为。这些标志当组合中有一个PARTIAL_WAKE_LOCK时将没有效果。**二、权限获取要进行电源的操作需要在AndroidManifest.xml中声明该应用有设置电源管理的权限。*<uses-permissionandroid:name="android.permission.WAKE_LOCK"/>*你可能还需要*<uses-permissionandroid:name="android.permission.DEVICE_POWER"/>**三、WakeLock的设置是Activiy级别的,不是针对整个Application应用的。***/abstractclassWakeLockServiceextendsService{privateandroid.os.PowerManager.WakeLockmWakeLock;WakeLockService(){}/***获取锁,保持屏幕亮度。Android中通过各种Lock锁对电源进行控制,需要注意的是加锁和解锁必须成对出现。*一般使用:这个函数在Activity的onResume中被调用。releaseWakeLock()方法则是释放该锁,在Activity的onPause中被调用。*/protectedvoidacquireWakeLock(){if(mWakeLock==null){//通过PowerManager的newWakeLock((intflags,Stringtag)方法来生成WakeLock实例。//intFlags指示要获取哪种WakeLock,不同的Lock对cpu、屏幕、键盘灯有不同影响。PowerManagerpm=(PowerManager)getSystemService(Context.POWER_SERVICE);mWakeLock=pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK,getClass().getCanonicalName());mWakeLock.setReferenceCounted(false);mWakeLock.acquire();}}protectedvoidacquireWakeLock(longtimeout){if(mWakeLock==null){PowerManagerpm=(PowerManager)getSystemService(Context.POWER_SERVICE);mWakeLock=pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK,getClass().getCanonicalName());mWakeLock.setReferenceCounted(false);mWakeLock.acquire(timeout);}}/***释放锁,显示的释放,如果申请的锁不释放系统就不会进入休眠。*/protectedvoidreleaseWakeLock(){if(mWakeLock==null||!mWakeLock.isHeld()){mWakeLock.release();mWakeLock=null;}}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。