【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



目录
相关文章
|
1天前
|
敏捷开发 IDE 测试技术
自动化测试框架的选择与应用
【9月更文挑战第16天】在软件开发周期中,测试环节扮演着至关重要的角色。随着敏捷开发和持续集成的流行,自动化测试成为提升软件质量和效率的关键手段。本文将探讨如何根据项目需求选择合适的自动化测试框架,并通过实际案例分析展示其在软件开发过程中的应用。我们将从单元测试、集成测试到端到端测试等多个层面,讨论自动化测试的最佳实践和常见问题解决策略。
|
2天前
|
搜索推荐 Java Android开发
打造个性化安卓应用:从设计到发布的全程指南
【9月更文挑战第15天】本篇文章将带领读者踏上一段激动人心的旅程,从构思一个独特的安卓应用想法开始,直至将其变为现实并成功发布。我们将一起探索如何捕捉灵感、设计界面、编写代码以及最终将应用推向市场。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供宝贵的洞见和实用的技巧,让你的应用在竞争激烈的市场中脱颖而出。
28 17
|
1天前
|
数据采集 人工智能 自然语言处理
探索软件测试中的人工智能应用
在当今快速发展的技术世界中,软件测试作为确保软件质量的关键环节,正经历着前所未有的变革。随着人工智能技术的不断成熟和应用,其在软件测试领域的潜力逐渐显现,为提升测试效率、准确性和自动化水平提供了新的可能性。本文将深入探讨人工智能在软件测试中的应用现状、面临的挑战以及未来的发展趋势,旨在为读者提供一个关于AI如何改变软件测试行业的全面视角。
|
1天前
|
机器学习/深度学习 人工智能 算法
软件测试中的人工智能应用
在当今快速发展的科技世界中,人工智能(AI)已经在各个领域中展现了其强大的影响力。软件测试作为软件开发过程中的关键步骤,也正在逐渐受到AI技术的深刻影响。本文将探讨AI在软件测试中的应用,分析其带来的优势与挑战,并提供一些实际案例来说明这些变化。通过深入理解AI在软件测试中的角色,我们可以预见一个更加高效、智能的软件测试未来。
11 0
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
软件测试中的人工智能应用
本文探讨了人工智能在软件测试中的应用,包括自动化测试、缺陷预测和测试用例生成等方面。通过实际案例分析,展示了如何利用AI技术提高软件测试的效率和准确性,并讨论了未来的发展趋势。
12 0
|
4天前
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
16 0
|
6天前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
34 7
Jmeter实现WebSocket协议的接口测试方法
|
6天前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
27 3
快速上手|HTTP 接口功能自动化测试
|
6天前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
19 5
|
22天前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~