博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android笔记:Wake Lock
阅读量:7067 次
发布时间:2019-06-28

本文共 2931 字,大约阅读时间需要 9 分钟。

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,如需转载请自行联系原作者
你可能感兴趣的文章
HTTP协议(2)
查看>>
2018.12.19|区块链技术头条
查看>>
React知识点:关于className处理
查看>>
CSS 中的 Grid 布局 完全指南
查看>>
简介响应状态码1xx、2xx、5xx
查看>>
线程死锁
查看>>
超级易懂的互联网通信(上)
查看>>
Java如何创建临时文件并打印File各种属性
查看>>
说说如何利用 Oracle 命令来解决函数运行错误
查看>>
使用docker-compose搭建zabbix
查看>>
亚马逊频频失约 遭消费者起诉
查看>>
vim set ts=4 自动缩进
查看>>
交互体验设计优秀的产品
查看>>
A记录(主机名解析)、CNAME(别名解析)和URL转发(域名转发)
查看>>
我的友情链接
查看>>
HTML(超文本标记语言)之【动态网页】
查看>>
【Linux】修改"$PATH"环境变量的探索
查看>>
我的友情链接
查看>>
firefox各版本下载地址
查看>>
Dubbo之ProxyFactory
查看>>