深入理解 AuthenticationManagerBuilder 【源码篇】
978
2022-05-30
文章目录
一、使用 WeakLock 保持 CPU 唤醒 ( 费电操作 )
1、保持 CPU 唤醒
2、使用 WeakLock 保持 CPU 唤醒流程
3、使用 WeakLock 保持 CPU 唤醒代码示例
二、屏幕唤醒
三、源码及资源下载
参考 Google 官方文档 :
优化电池续航时间
管理设备唤醒状态
使设备保持唤醒状态
设置重复闹铃时间
一、使用 WeakLock 保持 CPU 唤醒 ( 费电操作 )
1、保持 CPU 唤醒
1 . Android 设备休眠次序 :
Android 设备长时间不使用时 ,
① 屏幕先变暗 ,
② 然后屏幕关闭 ,
③ 最后关闭 CPU ;
2 . CPU 唤醒状态 :
如果 CPU 被关闭了 , 那么 Service 服务 , 肯定无法运行了 ,
这里需要让 CPU 保持唤醒状态 ;
3 . Service 服务后台运行 : 后台 Service 服务运行时 , 需要 CPU 唤醒 , 维持后台服务运行 ;
2、使用 WeakLock 保持 CPU 唤醒流程
使用 WeakLock 保持 CPU 唤醒流程 :
① 获取 Powermanager 服务 :
跨进程获取 PowerManager 服务 ;
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
1
② 判断是否支持 CPU 唤醒 :
调用 PowerManager 对象的 isWakeLockLevelSupported 方法
, 获取该设备是否支持 CPU 唤醒操作 ;
powerManager.isWakeLockLevelSupported(PowerManager.PARTIAL_WAKE_LOCK)
1
③ 创建 PowerManager.WakeLock :
调用 PowerManager 对象 的 newWakeLock 方法
, 创建唤醒锁 ;
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WAKE_LOCK");
1
④ 开启唤醒 CPU 操作 :
调用 PowerManager.WakeLock 对象的 acquire 开始唤醒 CPU 操作 ;
mWakeLock.acquire();
1
⑤ 结束唤醒 CPU 操作 :
不需要 CPU 唤醒时 , 及时释放唤醒锁 ;
mWakeLock.release();
1
3、使用 WeakLock 保持 CPU 唤醒代码示例
1 . 在 AndroidManifest.xml 中设置权限 : 删除了大部分配置 , 只保留必要配置 ;
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
2 . 服务 Service 保持 CPU 唤醒代码示例 :
package kim.hsl.bp; import android.annotation.SuppressLint; import android.app.Service; import android.Content.Intent; import android.os.Build; import android.os.IBinder; import android.os.PowerManager; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; public class WeakLockService extends Service { public static final String TAG = "WeakLockService"; /** * 唤醒锁定 服务 */ private PowerManager.WakeLock mWakeLock; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @SuppressLint("InvalidWakeLockTag") @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override public void onCreate() { super.onCreate(); // 跨进程获取 PowerManager 服务 PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); // 判断是否支持 CPU 唤醒 boolean isWakeLockLevelSupported = powerManager. isWakeLockLevelSupported(PowerManager.PARTIAL_WAKE_LOCK); // 支持 CPU 唤醒 , 才保持唤醒 if(isWakeLockLevelSupported){ // 创建只唤醒 CPU 的唤醒锁 mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WAKE_LOCK"); // 开始唤醒 CPU mWakeLock.acquire(); } } @Override public void onDestroy() { super.onDestroy(); // 释放 CPU 唤醒锁 if(mWakeLock != null){ mWakeLock.release(); } } }
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
二、屏幕唤醒
屏幕唤醒操作 :
① 代码中设置 :
在 Activity 中为 Window 添加
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
标识 ;
package kim.hsl.bp; import android.os.Bundle; import android.view.WindowManager; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { public static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
② 配置文件设置 : 在布局的根标签中设置
android:keepScreenOn=“true”
属性 ;
1
2
3
4
5
6
7
8
9
10
11
上述配置不需要特殊权限 , 不需要维护资源的申请释放 ;
三、源码及资源下载
源码及资源- :
① GitHub 工程地址 : Battery_Performance
② 使用 WeakLock 保持 CPU 唤醒 Service 代码地址 : WeakLockService.java
③ AndroidManifest.xml 配置文件地址 : AndroidManifest.xml
④ 屏幕唤醒 MainActivity.java 地址 : MainActivity.java
⑤ 屏幕唤醒布局文件 activity_main.xml 地址 : activity_main.xml
Android
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。