Android笔记:Wake Lock

简介:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import  android.app.Service;
import  android.content.Context;
import  android.os.PowerManager;
 
/**
  * Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠,
  * 可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的,
  * 超时的锁会在时间过去以后自动解锁. 如果没有锁了或者超时了, 内核就
  * 会启动休眠的那套机制来进入休眠.
 
  * 一、关于int flags 各种锁的类型对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: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. 
  * 6.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.
 
  * 你能加两个以上的标志,这些仅能影响屏幕的行为。这些标志当组合中有一个PARTIAL_WAKE_LOCK时将没有效果。
 
  * 二、权限获取 要进行电源的操作需要在AndroidManifest.xml中声明该应用有设置电源管理的权限。 
  * <uses-permission android:name="android.permission.WAKE_LOCK" /> 
  * 你可能还需要 
  * <uses-permission android:name="android.permission.DEVICE_POWER" />
 
  * 三、WakeLock的设置是 Activiy 级别的,不是针对整个Application应用的。
 
  **/
 
abstract  class  WakeLockService  extends  Service
{
     private  android.os.PowerManager.WakeLock mWakeLock;
     
     WakeLockService()
     {
     }
     
     /**
      * 获取锁,保持屏幕亮度。 Android中通过各种Lock锁对电源进行控制,需要注意的是加锁和解锁必须成对出现。
      * 一般使用:这个函数在Activity的 onResume中被调用。releaseWakeLock()方法则是释放该锁,在Activity的onPause中被调用。
      */
     protected  void  acquireWakeLock()
     {
         if  (mWakeLock ==  null )
         {
             //通过PowerManager的newWakeLock((int flags, String tag)方法来生成WakeLock实例。 
             //int Flags指示要获取哪种WakeLock,不同的Lock对cpu、屏幕、键盘灯有不同影响。
             PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
             mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, getClass().getCanonicalName());
             mWakeLock.setReferenceCounted( false );
             mWakeLock.acquire();
         }
     }
     
     protected  void  acquireWakeLock( long  timeout)
     {
         if  (mWakeLock ==  null )
         {
             PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
             mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, getClass().getCanonicalName());
             mWakeLock.setReferenceCounted( false );
             mWakeLock.acquire(timeout);
         }
     }
     
     /**
      * 释放锁,显示的释放,如果申请的锁不释放系统就不会进入休眠。
      */
     protected  void  releaseWakeLock()
     {
         
         if (mWakeLock ==  null  || !mWakeLock.isHeld())
         {
             mWakeLock.release();
             mWakeLock =  null ;
         }
     }
}




本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1610983,如需转载请自行联系原作者

目录
相关文章
|
3月前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
151 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
3月前
|
Unix Linux Shell
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
在Linux环境下交叉编译Android所需的FFmpeg so库,首先下载`android-ndk-r21e`,然后解压。接着,上传FFmpeg及相关库(如x264、freetype、lame)源码,修改相关sh文件,将`SYSTEM=windows-x86_64`改为`SYSTEM=linux-x86_64`并删除回车符。对x264的configure文件进行修改,然后编译x264。同样编译其他第三方库。设置环境变量`PKG_CONFIG_PATH`,最后在FFmpeg源码目录执行配置、编译和安装命令,生成的so文件复制到App工程指定目录。
281 9
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
|
2月前
|
Java API Android开发
技术经验分享:Android源码笔记——Camera系统架构
技术经验分享:Android源码笔记——Camera系统架构
31 0
|
3月前
|
安全 Linux Android开发
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
该文介绍了如何在Linux服务器上交叉编译Android的FFmpeg库以支持HTTPS视频播放。首先,从GitHub下载openssl源码,解压后通过编译脚本`build_openssl.sh`生成64位静态库。接着,更新环境变量加载openssl,并编辑FFmpeg配置脚本`config_ffmpeg_openssl.sh`启用openssl支持。然后,编译安装FFmpeg。最后,将编译好的库文件导入App工程的相应目录,修改视频链接为HTTPS,App即可播放HTTPS在线视频。
72 3
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
|
3月前
|
Java 测试技术 开发工具
Android 笔记:AndroidTrain , Lint , build(1),只需一篇文章吃透Android多线程技术
Android 笔记:AndroidTrain , Lint , build(1),只需一篇文章吃透Android多线程技术
|
3月前
|
设计模式 缓存 前端开发
真的强!借助阿里技术博主分享的Android面试笔记,我拿到了字节跳动的offer
真的强!借助阿里技术博主分享的Android面试笔记,我拿到了字节跳动的offer
|
3月前
|
存储 Java API
Android系统 文件访问权限笔记
Android系统 文件访问权限笔记
326 1
|
10月前
|
Java Android开发
[笔记]Android 学习一之转场动画+ViewPager+ListView简单Demo
[笔记]Android 学习一之转场动画+ViewPager+ListView简单Demo
|
10月前
|
Android开发
[笔记]Android开发之相机开发 Camera1、2、X
[笔记]Android开发之相机开发 Camera1、2、X
下一篇
云函数