前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 电量优化】电量优化特性 ( Doze 低电耗模式 | Standby 应用待机模式 | 白名单设置 | 白名单添加系统设置界面 | 指定应用的白名单添加界面 | 测试应用 )

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

作者头像
韩曙亮
发布2023-03-28 15:08:42
6.6K0
发布2023-03-28 15:08:42
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

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

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

  • Doze 低耗电模式 : 延迟后台应用的 CPU 和网络模块工作 , 之后集中执行相关工作 ;
  • Standby 应用待机模式 : 延迟近期没有使用过的应用的网络活动 ;

一、Doze 低耗电模式简介


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

  • 未接通电源
  • 屏幕关闭
  • 设备处于不活动状态 , 并且已经维持了一段时间
  • 没有在白名单中

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

退出 Doze 低耗电模式 :

  • 充电
  • 唤醒设备

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

在这里插入图片描述
在这里插入图片描述

低耗电模式限制的操作 :

  • 访问网络
  • 唤醒锁定
  • AlarmManager 闹钟管理器操作
  • WLAN 扫描
  • 同步适配器
  • JobScheduler

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

二、Standby 应用待机模式简介


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

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

  • 用户启动的应用
  • 应用有前台进程运行
  • 该应用有对应的通知处于可见状态
  • 设备管理器应用

三、Doze 和 Standby 模式测试


Doze 低耗电模式测试 :

  • 进入 Doze 模式 : 进入 Doze 模式后 , 测试应用的运行状况 , 是否能达到要求 ;
代码语言:javascript
复制
$ adb shell dumpsys deviceidle force-idle
  • 退出 Doze 模式 : 退出 Doze 模式之后 , 测试应用运行状态 , 是否恢复正常 ;
代码语言:javascript
复制
$ adb shell dumpsys deviceidle unforce
  • 重新激活设备 :
代码语言:javascript
复制
 $ adb shell dumpsys battery reset

Standby 应用待机模式测试 :

  • 使应用强行进入待机模式 : 进入 Standby 模式后 , 测试应用的运行状况 , 是否能达到要求 ;
代码语言:javascript
复制
$ adb shell dumpsys battery unplug
$ adb shell am set-inactive <packageName> true
  • 应用唤醒 : 退出 Standby 模式之后 , 测试应用运行状态 , 是否恢复正常 ;
代码语言:javascript
复制
$ adb shell am set-inactive <packageName> false
$ adb shell am get-inactive <packageName>

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


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

白名单添加工具类 :

代码语言:javascript
复制
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 中调用 :

代码语言:javascript
复制
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);
    }
}

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

在这里插入图片描述
在这里插入图片描述

设置不进行优化 :

在这里插入图片描述
在这里插入图片描述

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


白名单添加工具类 :

代码语言:javascript
复制
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 中调用 :

代码语言:javascript
复制
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.addWhiteList2(this);
    }
}

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

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、Doze 低耗电模式简介
  • 二、Standby 应用待机模式简介
  • 三、Doze 和 Standby 模式测试
  • 四、白名单添加 ( 方式一 )
  • 五、白名单添加 ( 方式二 )
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档