`
isiqi
  • 浏览: 16387197 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Android WakeLock

 
阅读更多

前言

  学习android一段时间了,为了进一步了解android的应用是如何设计开发的,决定详细研究几个开源的android应用。从一些开源应用中吸收点东西,一边进行量的积累,一边探索android的学习研究方向。这里我首先选择了jwood的Standup Timer项目。本文将把研究的内容笔记整理,建立一个索引列表。

PowerManager.WakeLock

  PowerManager.WakerLock是我分析Standup Timer源代码时发现的一个小知识点,Standup Timer 用WakeLock保证程序运行时保持手机屏幕的恒亮(程序虽小但也做得相当的细心,考虑的很周到)。PowerManager 和PowerManager.WakerLock7用于对Android设备的电源进行管理。
  PowerManager:This class gives you control of the power state of the device.
  PowerManager.WakeLock:lets you say that you need to have the device on.
  Android中通过各种Lock锁对电源进行控制,需要注意的是加锁和解锁必须成对出现。先上一段Standup Timer里的代码然后进行说明。
代码
private void acquireWakeLock() {
if (wakeLock == null) {
Logger.d(
"Acquiring wake lock");
PowerManager pm
= (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock
= pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, this.getClass().getCanonicalName());
wakeLock.acquire();
}

}


private void releaseWakeLock() {
if (wakeLock != null && wakeLock.isHeld()) {
wakeLock.release();
wakeLock
= null;
}

}

acquireWakeLock()方法中获取了SCREEN_DIM_WAKE_LOCK锁,该锁使 CPU 保持运转,屏幕保持亮度(可以变灰)。这个函数在Activity的 onResume中被调用。releaseWakeLock()方法则是释放该锁。它在Activity的 onPause中被调用。利用Activiy的生命周期,巧妙的让acquire()和release()成对出现。
@Override
protected void onResume()
{
super.onResume();
//获取锁,保持屏幕亮度
acquireWakeLock();
startTimer();
}
代码
protected void onPause()
{
super.onPause();
synchronized(this) {
cancelTimer();
releaseWakeLock();

if (finished) {
clearState();
}
else {
saveState();
}
}
}

PowerManager和WakeLock的操作步骤
  1.   PowerManagerpm=(PowerManager)getSystemService(Context.POWER_SERVICE);通过Context.getSystemService().方法获取PowerManager实例。
  2.   然后通过PowerManager的newWakeLock((int flags,Stringtag)来生成WakeLock实例。int Flags指示要获取哪种WakeLock,不同的Lock对cpu 、屏幕、键盘灯有不同影响。
  3.   获取WakeLock实例后通过acquire()获取相应的锁,然后进行其他业务逻辑的操作,最后使用release()释放(释放是必须的)。

关于int flags

  各种锁的类型对CPU 、屏幕、键盘的影响:

PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。

SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯

SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯

FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度

ACQUIRE_CAUSES_WAKEUP:Normal wake locks don't actually turn on the illumination. Instead, they cause the illumination to remain on once it turns on (e.g. from user activity). This flag will force the screen and/or keyboard to turn on immediately, when the WakeLock is acquired. A typical use would be for notifications which are important for the user to see immediately.

ON_AFTER_RELEASE:f this flag is set, the user activity timer will be reset when the WakeLock is released, causing the illumination to remain on a bit longer. This can be used to reduce flicker if you are cycling between wake lock conditions.

权限获取

要进行电源的操作需要在AndroidManifest.xml中声明该应用有设置电源管理的权限。
<uses-permission android:name="android.permission.WAKE_LOCK" />
你可能还需要
<uses-permission android:name="android.permission.DEVICE_POWER" />
另外WakeLock的设置是 Activiy 级别的,不是针对整个Application应用的。

系列索引



转自:http://www.cnblogs.com/keyindex/articles/1819504.html

分享到:
评论

相关推荐

    android WakeLock使用方法代码实例

    Android WakeLock 使用方法代码实例 Android WakeLock 是 Android 中的一个重要组件,它可以控制屏幕的背光开关,唤醒锁的意思是它可以在屏幕关闭时保持屏幕的点亮状态。下面是一个使用 WakeLock 的代码实例: ...

    浅析Wakelock机制与Android电源管理

    浅析Wakelock机制与Android电源管理 Android电源管理是移动设备中非常重要的一方面,在Android系统中,Wakelock机制是电源管理的核心机制之一。Wakelock机制是Android系统中的一个重要组件,用于管理Android设备的...

    Android powermanger wakelock

    Android 电源管理 -- wakelock机制,通过控制wakelock 实现保持pad 禁止休眠状态; Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠, 可以被用户态程序和内核获得. 这个锁可以是有超时的 或者 是...

    android休眠与唤醒机制.zip

    本资料“android休眠与唤醒机制.zip”主要探讨了Android系统的电源管理,特别是Wakelock的概念,以及如何进行远程唤醒和休眠操作。 1. Android休眠机制: - 休眠是Android设备为了节省电力,当屏幕关闭或一段时间...

    浅析Wakelock机制与Android电源管理.pdf

    浅析Wakelock机制与Android电源管理.pdf 摘要: 本文浅析了Android电源管理机制,特别是Wakelock机制在Android电源管理中的应用。Android电源管理是Android操作系统中的一项重要功能,旨在有效地管理电源,延长设备...

    Android应用程序保持后台唤醒(使用WakeLock实现)

    本篇文章将深入探讨如何使用`WakeLock`来确保Android应用即使在屏幕关闭或系统休眠时也能继续运行。 `WakeLock`是Android电源管理的一部分,由`PowerManager`类提供。它提供了一种机制,允许开发者阻止设备进入休眠...

    android休眠与唤醒驱动流程分析

    android休眠与唤醒驱动流程分析 android wakelock 休眠 唤醒

    wakelock:Flutter插件,可让您保持设备屏幕处于唤醒状态,即通过打开或关闭设备的唤醒锁来防止屏幕进入Hibernate状态。 适用于Android,iOS,macOS和Web

    Wakelock是Flutter插件,可让您保持设备屏幕清醒,即防止屏幕进入Hibernate状态。 支持平台 平台 wakelock支持 安卓 :check_mark_button: 的iOS :check_mark_button: 网页 :check_mark_button: 苹果系统 :...

    Android亮屏和熄屏控制实例详解

    总的来说,Android的`PowerManager`和`WakeLock`机制为开发者提供了精细的屏幕控制,允许根据应用需求定制屏幕的状态。理解并正确使用这些工具,对于创建高效、用户体验良好的Android应用至关重要。在实际开发过程中...

    我们可以通过代理对应的 Service 实现,完成收集 Wakelock、Alarm、GPS 的申请堆栈、释放信息、手机充电状态

    - **什么是Wakelock**:Wakelock是Android系统中一种机制,允许应用请求保持CPU或屏幕处于唤醒状态,防止设备进入休眠模式。这在执行重要任务(如后台下载或同步)时很有用,但也可能导致电量快速消耗。 - **Wake...

    android中的屏幕唤醒

    - 在使用`WakeLock`时,务必确保在不再需要保持屏幕亮起时释放它,以避免不必要的电池消耗。 - 使用`DISABLE_KEYGUARD`权限时要特别小心,因为它可能对用户隐私造成潜在威胁,应仅在确实需要的情况下使用。 总之,...

    android_开启关闭待机demo

    `WakeLock`是Android电源管理框架的一部分,允许应用程序请求保持CPU运行或保持屏幕亮起,防止设备进入休眠状态。`RedCdnWakeLock`可能是这个项目中的一个类,用于管理`WakeLock`的获取和释放。 1. **WakeLock的...

    安卓Android源码——一键锁屏功能源码.zip

    因此,大多数情况下,我们会使用`WakeLock`来控制屏幕的状态,这需要`android.permission.WAKE_LOCK`权限。 在源码中,`weberLockscreen`可能是一个包含主类和其他辅助类的Java包。主要的类可能是`...

    Android中唤醒屏幕

    WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "MyApp:ScreenLock"); ``` 这里,`POWER_SERVICE`是获取PowerManager服务的别名,`SCREEN_BRIGHT_WAKE_LOCK`表示我们要获取...

    LineChen#AndroidNotes#使用WakeLock使Android应用程序保持后台唤醒1

    各种锁的类型对CPU 、屏幕、键盘的影响:SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯SCREEN

    Android背光控制_2

    ### Android背光控制的核心组件:PowerManager与WakeLock 在Android开发中,`PowerManager`类是控制设备功耗的重要工具,而`WakeLock`则是`PowerManager`提供的用于防止系统进入休眠状态的对象。通过获取`...

    Linux Kernel and Android 休眠与唤醒

    4. **Wake Lock**:在必要时,通过Wake Lock保持设备活跃,直到特定条件满足。 总之,Linux内核提供了基本的休眠与唤醒框架,而Android在此基础上进行了优化,以适应移动设备的需求,提供更好的电池寿命和用户体验...

    Android保持屏幕常亮唤醒状态的方法

    为了实现这个功能,Android提供了`WakeLock`接口,它允许应用程序控制设备的电源管理策略,防止设备进入休眠状态。以下是关于如何在Android中保持屏幕常亮唤醒状态的详细步骤和知识点: 1. **权限声明**: 在...

Global site tag (gtag.js) - Google Analytics