作者 | 扬阜
文章目录
一、运用 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);
② 判别是否支撑 CPU 唤醒 : 调用 PowerManager 目标的 isWakeLockLevelSupported 方法 , 获取该设备是否支撑 CPU 唤醒操作 ;
powerManager.isWakeLockLevelSupported(PowerManager.PARTIAL_WAKE_LOCK)
mWakeLock.acquire();
③ 创立 PowerManager.WakeLock : 调用 PowerManager 目标 的 newWakeLock 方法 , 创立唤醒锁 ;
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WAKE_LOCK");
④ 敞开唤醒 CPU 操作 : 调用 PowerManager.WakeLock 目标的 acquire 开端唤醒 CPU 操作 ;
mWakeLock.acquire();
⑤ 结束唤醒 CPU 操作 : 不需求 CPU 唤醒时 , 及时开释唤醒锁 ;
mWakeLock.release();
3、运用 WeakLock 坚持 CPU 唤醒代码示例
1 . 在 AndroidManifest.xml 中设置权限 : 删除了大部分装备 , 只保存必要装备 ;
package="kim.hsl.bp"> android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> android:name=".WeakLockService" android:process=":weaklock" />
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(); } } }
二、屏幕唤醒
屏幕唤醒操作 :
① 代码中设置 : 在 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); } }
② 装备文件设置 : 在布局的根标签中设置 android:keepScreenOn=“true” 特点 ;
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true" tools:context=".MainActivity">
三、源码及资源下载
源码及资源下载地址 :
① GitHub 工程地址 : Battery_Performance
② 运用 WeakLock 坚持 CPU 唤醒 Service 代码地址 : WeakLockService.java
③ AndroidManifest.xml 装备文件地址 : AndroidManifest.xml
④ 屏幕唤醒 MainActivity.java 地址 : MainActivity.java
⑤ 屏幕唤醒布局文件 activity_main.xml 地址 : activity_main.xml