天翼云代理,天翼云代理商,北京代理商
天翼云2.5折专线:18510009100/18510009200(全国市话)

【Android 电量优化】电量优化 ( 唤醒锁定 | 使用 WeakLock 保持服务唤醒 | 屏幕唤醒 )

2022-01-26 03:30:56

作者 | 扬阜

文章目录

一、运用 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


12年经验 · 提供上云保障

服务热线:132-6161-6125(手机) 400-150-1900(全国市话)

站内导航: 天翼云服务器价格| 天翼云购买流程| 天翼云代理| 北京天翼云代理商| 杭州天翼云代理| 深圳天翼云代理商| 钉钉代理商| 阿里云代理| 公司官网

我公司收款账号| 天翼云备案系统

CopyRight © 2019 天翼云代理商. All Rights Reserved 京ICP备2024071855号-7 管理-北京优胜智连科技有限公司