android.os.PowerManager api运用

本文介绍了Android系统中PowerManager类及其成员WakeLock的基本用法,包括如何请求和释放唤醒锁来控制设备的休眠状态,确保应用在特定场景下能够保持屏幕常亮。

 

  1. // PowerManager的一般用法,请求和释放唤醒锁  
  2. PowerManager powerMgr = (PowerManager)  
  3.         getSystemService(Context.POWER_SERVICE);  
  4. int flags = PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;  
  5. WakeLock wakeLock = powerMgr.newWakeLock(flags, "for debug purpose tag");  
  6. wakeLock.acquire(); // 获取唤醒锁  
  7. wakeLock.release(); // 释放唤醒锁  
  8. // 在游戏中,会将acquire放在onResume中;将release放在onPause,这样在程序运行时就可以保持屏幕常量;在程序处在后台时,就恢复原来的设置。  
  9.   
  10.   
  11. // PowerManager的其它api的使用  
  12. powerMgr.goToSleep(SystemClock.uptimeMillis() + 100); // 100ms后进入睡眠  
  13. powerMgr.isScreenOn(); // 屏幕是否亮着  
  14. powerMgr.userActivity(SystemClock.uptimeMillis()+100true); // 相当于按home键,会引起从睡眠激活  
  15.   
  16.   
  17. // WakeLock的其它api  
  18. wakeLock.acquire(1000); // 获取唤醒锁,并在1000ms后释放  
  19. wakeLock.isHeld(); // 当前是否持有唤醒锁  
  20. // 是否使用引用计数,默认是启用的。引用计数应该就是第一次请求为1,第二次加1,再一次再加1。  
  21. // 在释放时,只有引用计数为0时才被视为完全释放(所以要多次调用release)  
  22. wakeLock.setReferenceCounted(true);   
Process: com.android.networkstack.process, PID: 4762 java.lang.IllegalArgumentException: Wakelock.mLock is already dead. at android.os.Parcel.createExceptionOrNull(Parcel.java:3374) at android.os.Parcel.createException(Parcel.java:3354) at android.os.Parcel.readException(Parcel.java:3337) at android.os.Parcel.readException(Parcel.java:3279) at android.os.IPowerManager$Stub$Proxy.acquireWakeLock(IPowerManager.java:1471) at android.os.PowerManager$WakeLock.acquireLocked(PowerManager.java:4194) at android.os.PowerManager$WakeLock.acquire(PowerManager.java:4175) at com.android.networkstack.android.net.ip.IpReachabilityMonitor$Dependencies$1.acquireWakeLock(IpReachabilityMonitor.java:198) at com.android.networkstack.android.net.ip.IpReachabilityMonitor.probeAll(IpReachabilityMonitor.java:572) at com.android.networkstack.android.net.ip.IpClient.handleUpdateL2Information(IpClient.java:2845) at com.android.networkstack.android.net.ip.IpClient.-$$Nest$mhandleUpdateL2Information(IpClient.java:0) at com.android.networkstack.android.net.ip.IpClient$StartedState.processMessage(IpClient.java:3388) at com.android.networkstack.com.android.internal.util.StateMachine$SmHandler.processMsg(StateMachine.java:1002) at com.android.networkstack.com.android.internal.util.StateMachine$SmHandler.handleMessage(StateMachine.java:820) at android.os.Handler.dispatchMessage(Handler.java:115) at android.os.Looper.loopOnce(Looper.java:298) at android.os.Looper.loop(Looper.java:408) at android.os.HandlerThread.run(HandlerThread.java:85) Caused by: android.os.RemoteException: Remote stack trace: at com.android.server.power.PowerManagerService$WakeLock.linkToDeath(PowerManagerService.java:6302) at com.android.server.power.PowerManagerService$WakeLock.<init>(PowerManagerService.java:6289) at com.android.server.power.PowerManagerService.acquireWakeLockInternal(PowerManagerService.java:1890) at com.android.server.power.PowerManagerService.-$$Nest$macquireWakeLockInternal(Unknown Source:0) at com.android.server.power.PowerManagerService$BinderService.acquireWakeLock(PowerManagerService.java:6785)
11-27
11-21 20:49:50.147 4762 30319 E AndroidRuntime: FATAL EXCEPTION: IpClient.wlan0 11-21 20:49:50.147 4762 30319 E AndroidRuntime: Process: com.android.networkstack.process, PID: 4762 11-21 20:49:50.147 4762 30319 E AndroidRuntime: java.lang.IllegalArgumentException: Wakelock.mLock is already dead. 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at android.os.Parcel.createExceptionOrNull(Parcel.java:3374) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at android.os.Parcel.createException(Parcel.java:3354) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:3337) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:3279) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at android.os.IPowerManager$Stub$Proxy.acquireWakeLock(IPowerManager.java:1471) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at android.os.PowerManager$WakeLock.acquireLocked(PowerManager.java:4194) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at android.os.PowerManager$WakeLock.acquire(PowerManager.java:4175) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at com.android.networkstack.android.net.ip.IpReachabilityMonitor$Dependencies$1.acquireWakeLock(IpReachabilityMonitor.java:198) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at com.android.networkstack.android.net.ip.IpReachabilityMonitor.probeAll(IpReachabilityMonitor.java:572) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at com.android.networkstack.android.net.ip.IpClient.handleUpdateL2Information(IpClient.java:2845) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at com.android.networkstack.android.net.ip.IpClient.-$$Nest$mhandleUpdateL2Information(IpClient.java:0) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at com.android.networkstack.android.net.ip.IpClient$StartedState.processMessage(IpClient.java:3388) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at com.android.networkstack.com.android.internal.util.StateMachine$SmHandler.processMsg(StateMachine.java:1002) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at com.android.networkstack.com.android.internal.util.StateMachine$SmHandler.handleMessage(StateMachine.java:820) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:115) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:298) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at android.os.Looper.loop(Looper.java:408) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at android.os.HandlerThread.run(HandlerThread.java:85) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: Caused by: android.os.RemoteException: Remote stack trace: 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at com.android.server.power.PowerManagerService$WakeLock.linkToDeath(PowerManagerService.java:6302) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at com.android.server.power.PowerManagerService$WakeLock.<init>(PowerManagerService.java:6289) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at com.android.server.power.PowerManagerService.acquireWakeLockInternal(PowerManagerService.java:1890) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at com.android.server.power.PowerManagerService.-$$Nest$macquireWakeLockInternal(Unknown Source:0) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: at com.android.server.power.PowerManagerService$BinderService.acquireWakeLock(PowerManagerService.java:6785) 11-21 20:49:50.147 4762 30319 E AndroidRuntime: 11-21 20:49:50.663 1715 1715 D AndroidRuntime: Shutting down VM 11-21 20:49:50.664 1715 1715 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main 11-21 20:49:50.664 1715 1715 E AndroidRuntime: java.lang.IllegalStateException: Lost network stack. This is not the root cause of any issue, it is a side effect of a crash that happened earlier. Earlier logs should point to the actual issue. 11-21 20:49:50.664 1715 1715 E AndroidRuntime: at android.net.ConnectivityModuleConnector.maybeCrashWithTerribleFailure(ConnectivityModuleConnector.java:336) 11-21 20:49:50.664 1715 1715 E AndroidRuntime: at android.net.ConnectivityModuleConnector.-$$Nest$mmaybeCrashWithTerribleFailure(Unknown Source:0) 11-21 20:49:50.664 1715 1715 E AndroidRuntime: at android.net.ConnectivityModuleConnector$ModuleServiceConnection.onServiceDisconnected(ConnectivityModuleConnector.java:279) 11-21 20:49:50.664 1715 1715 E AndroidRuntime: at android.app.LoadedApk$ServiceDispatcher.doDeath(LoadedApk.java:2473) 11-21 20:49:50.664 1715 1715 E AndroidRuntime: at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:2488) 11-21 20:49:50.664 1715 1715 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:1027) 11-21 20:49:50.664 1715 1715 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:108) 11-21 20:49:50.664 1715 1715 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:298) 11-21 20:49:50.664 1715 1715 E AndroidRuntime: at android.os.Looper.loop(Looper.java:408) 11-21 20:49:50.664 1715 1715 E AndroidRuntime: at com.android.server.SystemServer.run(SystemServer.java:1139) 11-21 20:49:50.664 1715 1715 E AndroidRuntime: at com.android.server.SystemServer.main(SystemServer.java:709) 11-21 20:49:50.664 1715 1715 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 11-21 20:49:50.664 1715 1715 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:613) 11-21 20:49:50.664 1715 1715 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1052)
11-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值