【Android 电量优化】电量优化特性 ( Doze 低电耗模式 | Standby 应用待机模式 | 白名单设置 | 白名单添加系统设置界面 | 指定应用的白名单添加界面 | 测试应用 )

简介: 【Android 电量优化】电量优化特性 ( Doze 低电耗模式 | Standby 应用待机模式 | 白名单设置 | 白名单添加系统设置界面 | 指定应用的白名单添加界面 | 测试应用 )

文章目录

一、Doze 低耗电模式简介

二、Standby 应用待机模式简介

三、Doze 和 Standby 模式测试

四、白名单添加 ( 方式一 )

五、白名单添加 ( 方式二 )



Android 6.0 之后 , 引入了电量优化相关特性 Doze 低电耗模式 和 Standby 应用待机模式 ;


优化电池续航时间

针对低电耗模式和应用待机模式进行优化


上述两个特性都是通过 优化手机在未充电时的行为 , 达到延长手机待机时间的目的 ;


Doze 低耗电模式 : 延迟后台应用的 CPU 和网络模块工作 , 之后集中执行相关工作 ;

Standby 应用待机模式 : 延迟近期没有使用过的应用的网络活动 ;





一、Doze 低耗电模式简介


手机进入 Doze 低耗电模式条件 :


未接通电源

屏幕关闭

设备处于不活动状态 , 并且已经维持了一段时间

没有在白名单中


Doze 低耗电模式下 , 延迟 CPU 和网络使用 , 每隔一段时间有一段维护时间 , 在维护窗口时间内 , 集中执行被延迟的 CPU 和 网络操作 ; 维护期结束后 , 再次进入 Doze 低功耗模式 , 开始延迟 CPU 和网络操作 ;



退出 Doze 低耗电模式 :


充电

唤醒设备


下图是官网给出的 Doze 工作示意图 , 横轴代表时间 , 橙色部分表示 CPU 工作时间 , 绿色部分表示设备处于休眠状态 ; CPU 会在维护窗口期 , 集中执行一些任务 , 剩余的时间处于休眠状态 ;


image.png



低耗电模式限制的操作 :


访问网络

唤醒锁定

AlarmManager 闹钟管理器操作

WLAN 扫描

同步适配器

JobScheduler

上述操作都会在 Doze 窗口期进行集中操作 ;






二、Standby 应用待机模式简介


Standby 应用待机模式简介 : 如果用户一段时间内没有使用某个应用 , 则判定该应用处于待机模式 ;



以下操作不能判定为应用待机模式 :


用户启动的应用

应用有前台进程运行

该应用有对应的通知处于可见状态

设备管理器应用





三、Doze 和 Standby 模式测试


Doze 低耗电模式测试 :


进入 Doze 模式 : 进入 Doze 模式后 , 测试应用的运行状况 , 是否能达到要求 ;

$ adb shell dumpsys deviceidle force-idle


退出 Doze 模式 : 退出 Doze 模式之后 , 测试应用运行状态 , 是否恢复正常 ;

$ adb shell dumpsys deviceidle unforce


重新激活设备 :

$ adb shell dumpsys battery reset



Standby 应用待机模式测试 :


使应用强行进入待机模式 : 进入 Standby 模式后 , 测试应用的运行状况 , 是否能达到要求 ;

$ adb shell dumpsys battery unplug
$ adb shell am set-inactive <packageName> true


应用唤醒 : 退出 Standby 模式之后 , 测试应用运行状态 , 是否恢复正常 ;

$ adb shell am set-inactive <packageName> false
$ adb shell am get-inactive <packageName>






四、白名单添加 ( 方式一 )


加入了白名单以后 , 就不再受该功能限制 , 自由使用以下功能 ;


白名单添加工具类 :


package kim.hsl.bp;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.PowerManager;
import android.provider.Settings;
/**
 * 白名单
 */
public class WhiteListUtils {
    public static final String TAG = "WhiteListUtils";
    /**
     * 引导用户添加白名单
     * @param context
     */
    public static void addWhiteList(Context context){
        // 获取电量管理器
        PowerManager powerManager = (PowerManager) context.
                getSystemService(Context.POWER_SERVICE);
        // Android 6.0 以上才能使用该功能
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // 查看当前应用是否则电量白名单中
            boolean isInWhiteList = powerManager.
                    isIgnoringBatteryOptimizations(context.getPackageName());
            // 如果没有在白名单中 , 弹出对话框 , 引导用户设置白名单
            if(!isInWhiteList){
                // 弹出白名单设置对话框
                Intent intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
                context.startActivity(intent);
            }
        }
    }
}


Activity 中调用 :



public class MainActivity extends AppCompatActivity {
    public static final String TAG = "Battery_Performance.MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 引导用户打开白名单
        WhiteListUtils.addWhiteList(this);
    }
}




弹出白名单设置 : 需要自己从应用列表中选择 ;


image.png



设置不进行优化 :



image.png





五、白名单添加 ( 方式二 )


白名单添加工具类 :


package kim.hsl.bp;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.PowerManager;
import android.provider.Settings;
/**
 * 白名单
 */
public class WhiteListUtils {
    public static final String TAG = "WhiteListUtils";
    /**
     * 引导用户添加白名单
     * @param context
     */
    public static void addWhiteList2(Context context){
        // 获取电量管理器
        PowerManager powerManager = (PowerManager) context.
                getSystemService(Context.POWER_SERVICE);
        // Android 6.0 以上才能使用该功能
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // 查看当前应用是否则电量白名单中
            boolean isInWhiteList = powerManager.
                    isIgnoringBatteryOptimizations(context.getPackageName());
            // 如果没有在白名单中 , 弹出对话框 , 引导用户设置白名单
            if(!isInWhiteList){
                // 弹出白名单设置对话框
                Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
                // 带上要设置的包名
                intent.setData(Uri.parse("package:" + context.getPackageName()));
                context.startActivity(intent);
            }
        }
    }
}




Activity 中调用 :



package kim.hsl.bp;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.PowerManager;
import android.provider.Settings;
/**
 * 白名单
 */
public class WhiteListUtils {
    public static final String TAG = "WhiteListUtils";
    /**
     * 引导用户添加白名单
     * @param context
     */
    public static void addWhiteList2(Context context){
        // 获取电量管理器
        PowerManager powerManager = (PowerManager) context.
                getSystemService(Context.POWER_SERVICE);
        // Android 6.0 以上才能使用该功能
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // 查看当前应用是否则电量白名单中
            boolean isInWhiteList = powerManager.
                    isIgnoringBatteryOptimizations(context.getPackageName());
            // 如果没有在白名单中 , 弹出对话框 , 引导用户设置白名单
            if(!isInWhiteList){
                // 弹出白名单设置对话框
                Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
                // 带上要设置的包名
                intent.setData(Uri.parse("package:" + context.getPackageName()));
                context.startActivity(intent);
            }
        }
    }
}



弹出白名单设置 : 直接可以设置指定应用到白名单中 ;



image.png



目录
相关文章
|
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牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
8月前
|
JSON 测试技术 API
优化你的 REST Assured 测试:设置默认主机与端口、GET 请求与断言
REST Assured 是一个强大的 Java 库,用于简化 RESTful API 测试。本文详解了其核心功能:设置默认主机和端口以减少代码重复、发起 GET 请求并验证响应结果,以及通过断言确保接口行为符合预期。同时推荐 Apipost 工具,助力开发者提升 API 测试效率,实现更高效的接口管理与团队协作。掌握这些技巧,可显著优化测试流程与代码质量。
|
6月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的2FSK+帧同步系统开发与硬件片内测试,包含高斯信道,误码统计,可设置SNR
本文基于FPGA实现2FSK+帧同步系统,采用Verilog开发,包含Testbench、高斯信道、误码统计及可设置SNR功能。硬件版本新增ILA在线数据采集与VIO在线SNR设置模块,验证调制解调过程。理论部分介绍FSK调制解调原理、功率谱特性及帧同步机制,代码实现FSK信号生成与处理,适合数字通信学习与实践。
208 1
|
7月前
|
缓存 编解码 Android开发
Android内存优化之图片优化
本文主要探讨Android开发中的图片优化问题,包括图片优化的重要性、OOM错误的成因及解决方法、Android支持的图片格式及其特点。同时介绍了图片储存优化的三种方式:尺寸优化、质量压缩和内存重用,并详细讲解了相关的实现方法与属性。此外,还分析了图片加载优化策略,如异步加载、缓存机制、懒加载等,并结合多级缓存流程提升性能。最后对比了几大主流图片加载框架(Universal ImageLoader、Picasso、Glide、Fresco)的特点与适用场景,重点推荐Fresco在处理大图、动图时的优异表现。这些内容为开发者提供了全面的图片优化解决方案。
278 1
|
8月前
|
数据采集 移动开发 算法
【硬件测试】基于FPGA的QPSK调制+软解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现QPSK调制与软解调系统,包含Testbench、高斯信道、误码率统计模块,并支持不同SNR设置。硬件版本新增ILA在线数据采集和VIO在线SNR设置功能,提供无水印完整代码及测试结果。通过VIO分别设置SNR为6dB和12dB,验证系统性能。配套操作视频便于用户快速上手。 理论部分详细解析QPSK调制原理及其软解调实现过程,涵盖信号采样、相位估计、判决与解调等关键步骤。软解调通过概率估计(如最大似然法)提高抗噪能力,核心公式为*d = d_hat / P(d_hat|r[n])*,需考虑噪声对信号点分布的影响。 附Verilog核心程序代码及注释,助力理解与开发。
259 5
|
Android开发 iOS开发 C++
Flutter中设置Android的应用名称和图标(android,ios,web)
在前面的几期给大家介绍了flutter的安装以及一些简单的配置,还运行了helloword 那么接下来就带领大家了解如何设置应用名称以及图标
441 0
|
2月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
269 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
562 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
513 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡