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

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

文章目录

一、使用 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 中设置权限 : 删除了大部分配置 , 只保留必要配置 ;


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="kim.hsl.bp">
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <application
        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">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- WeakLock 保持 CPU 唤醒的 Service 服务 -->
        <service
            android:name=".WeakLockService"
            android:process=":weaklock" />
    </application>
</manifest>



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” 属性 ;


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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">
</androidx.constraintlayout.widget.ConstraintLayout>



三、源码及资源下载


源码及资源下载地址 :


① GitHub 工程地址 : Battery_Performance


② 使用 WeakLock 保持 CPU 唤醒 Service 代码地址 : WeakLockService.java


③ AndroidManifest.xml 配置文件地址 : AndroidManifest.xml


④ 屏幕唤醒 MainActivity.java 地址 : MainActivity.java


⑤ 屏幕唤醒布局文件 activity_main.xml 地址 : activity_main.xml

目录
相关文章
|
2月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
226 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
242 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
4月前
|
机器学习/深度学习 Android开发 数据安全/隐私保护
手机脚本录制器, 脚本录制器安卓,识图识色屏幕点击器【autojs】
完整的UI界面,包含录制控制按钮和状态显示 屏幕点击动作录制功能,记录点击坐标和时间间隔
|
9月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
2096 77
|
7月前
|
缓存 编解码 Android开发
Android内存优化之图片优化
本文主要探讨Android开发中的图片优化问题,包括图片优化的重要性、OOM错误的成因及解决方法、Android支持的图片格式及其特点。同时介绍了图片储存优化的三种方式:尺寸优化、质量压缩和内存重用,并详细讲解了相关的实现方法与属性。此外,还分析了图片加载优化策略,如异步加载、缓存机制、懒加载等,并结合多级缓存流程提升性能。最后对比了几大主流图片加载框架(Universal ImageLoader、Picasso、Glide、Fresco)的特点与适用场景,重点推荐Fresco在处理大图、动图时的优异表现。这些内容为开发者提供了全面的图片优化解决方案。
278 1
|
移动开发 监控 前端开发
构建高效Android应用:从优化布局到提升性能
【7月更文挑战第60天】在移动开发领域,一个流畅且响应迅速的应用程序是用户留存的关键。针对Android平台,开发者面临的挑战包括多样化的设备兼容性和性能优化。本文将深入探讨如何通过改进布局设计、内存管理和多线程处理来构建高效的Android应用。我们将剖析布局优化的细节,并讨论最新的Android性能提升策略,以帮助开发者创建更快速、更流畅的用户体验。
196 10
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
210 20
Android经典面试题之图片Bitmap怎么做优化
|
Java Android开发 UED
安卓应用开发中的内存管理优化技巧
在安卓开发的广阔天地里,内存管理是一块让开发者既爱又恨的领域。它如同一位严苛的考官,时刻考验着开发者的智慧与耐心。然而,只要我们掌握了正确的优化技巧,就能够驯服这位考官,让我们的应用在性能和用户体验上更上一层楼。本文将带你走进内存管理的迷宫,用通俗易懂的语言解读那些看似复杂的优化策略,让你的开发之路更加顺畅。
338 33
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
399 31
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
289 1