电量优化与网络优化

2023-11-11

 一:Doze低电耗模式

 
未充电、屏幕熄灭、让设备在一段时间内保持不活动状态。
延迟应用的后台 CPU 和网络活动,从而降低耗电量
 

 

二:Standby待机模式

 应用待机模式会延迟用户近期未与之交互的应用的后台网络活动。

三:白名单

系统提供了一个可配置的白名单,将部分免除低电耗模式和应用待机模式优化的应用列入其中。 在低电耗模式 和应用待机模式期间,列入白名单的应用可以使用网络并保留部分唤醒锁定

四:获取充电状态

我们可以通过检查电池状态以及电量来判断是否进行某些操作。比如我们可
以在充电时才进行一些数据上报之类的操作。

  public static void checkBattery(Context context) {
        IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        Intent batteryStatus = context.registerReceiver(null, ifilter);

        // 是否正在充电
        int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                status == BatteryManager.BATTERY_STATUS_FULL;

        // 什么方式充电?
        int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
        //usb
        boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
        //充电器
        boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;

        //获得电量
        int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
        float batteryPct = level * 100 / (float) scale;

        Log.e(TAG, "isCharging: " + isCharging + "  usbCharge: " + usbCharge + "  acCharge:" + acCharge);
        Log.e(TAG, "当前电量: " + batteryPct);
    }

五:监控充电状态变化

public class MainActivity extends AppCompatActivity {
 private PowerConnectionReceiver register;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.AppTheme);
        super.onCreate(savedInstanceState);

     //注册电量监听
        register = BatteryUtils.register(this);
}

@Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(register);
    }

}
public class BatteryUtils {

/**
     *  注册广播监听电量的变化
     * */
    public static PowerConnectionReceiver register(Context context) {
        //注册广播
        IntentFilter ifilter = new IntentFilter();
        //充电状态
        ifilter.addAction(Intent.ACTION_POWER_CONNECTED);
        ifilter.addAction(Intent.ACTION_POWER_DISCONNECTED);
        //电量显著变化
        ifilter.addAction(Intent.ACTION_BATTERY_LOW);//电量不足
        ifilter.addAction(Intent.ACTION_BATTERY_OKAY); //电量从低变回高
        PowerConnectionReceiver powerConnectionReceiver = new PowerConnectionReceiver();
        context.registerReceiver(powerConnectionReceiver, ifilter);
        return powerConnectionReceiver;
    }



}
/**
 *  监听电量变化的广播
 * 
 * */
public class PowerConnectionReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_POWER_CONNECTED)) {
            Toast.makeText(context, "充电状态:CONNECTED", Toast.LENGTH_SHORT).show();
        } else if (intent.getAction().equals(Intent.ACTION_POWER_DISCONNECTED)) {
            Toast.makeText(context, "充电状态:DISCONNECTED", Toast.LENGTH_SHORT).show();
        } else if (intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
            Toast.makeText(context, "电量过低", Toast.LENGTH_SHORT).show();
        } else if (intent.getAction().equals(Intent.ACTION_BATTERY_OKAY)) {
            Toast.makeText(context, "电量从低变回高", Toast.LENGTH_SHORT).show();
        }
    }
}

六: Battery Historian   是个检测手机随时间变化耗电量变化的可视化工具。可以帮助您诊断和识别应用存在的耗电问题。

Battery Historian可以帮助我们查看应用是否具有以下耗电行为:
过于频繁地触发唤醒提醒(至少每 10 秒钟一次)。 
持续保留 GPS 锁定。
至少每 30 秒调度一次作业。
至少每 30 秒调度一次同步。
使用手机无线装置的频率高于预期

七:Energy Profiler

Energy Profiler 可以了解应用在哪里耗用了不必要的电量。 Energy
Profiler 会监控 CPU 、网络无线装置和 GPS 传感器的耗电使用情况,并直观地显示其中每个组件消耗的电量。还会显
示可能会影响耗电量的系统事件(唤醒锁定、闹钟、作业和位置信息请求)的发生次数。

八:网络优化

正常一条网络请求需要经过的流程是这样:

第一步:DNS 解析,请求 DNS 服务器,获取域名对应的 IP 地址;
第二步:与服务端建立连接,包括 tcp 三次握手,安全协议同步流程;
第三步:连接建立完成,发送和接收数据,解码数据。
通过以上三步我们知道为了节省耗电量需要对以上三步进行优化:

八一:DNS优化:直接使用 IP 地址请求服务器,去除 DNS 解析步骤,不耗电省时高效;

DNSDomain Name System):把域名解析成IP地址,进行服务器访问。

  DNS的缺点:

  DNS 完整的解析流程过程过长繁琐;
  DNS的缓存时间设置不好控制,缓存时间设置过长,导致域名更新不及时,设置缓存时间过段,解析频繁,影响请求速度;
DNS域名容易劫持,不安全;
一次请求只能解析一个域名;

解决办法:

使用HTTPDNS请求,   直接通过IP地址,      直接请求后台服务器的地址,   不用向 向本地运营商询问域名解析的过程,避免了劫持问题,请求速度快,一次请求可以解析多个域名,同时也解决了DNS解析耗电的问题。

 

八二:连接优化: 使用复用连接(keep-alive)(长连接),不要每次请求都重新建立连接;

  优化具体方案:

   使用HTTP2协议 请求, 支持多路复用链接,。即支持同时处理多条并行发送请求,所有请求都可以在这条连接上并发进行请求,不用建立多条请求连接。

Android 的开源网络库OKhttp默认就会开启keep-alive多路复用链接,支持HTTP2.0

HTTP1.1 与HTTP2.0的区别

HTTP1.1 每次请求都需要进行三次握手建立连接耗时,每次请求完毕,连接就会关闭,一次连接 只能进行一次请求操作。

  HTTP2协议 请求, 支持多路复用链接,即支持同时处理多条并行发送请求,所有请求都可以在这条连接上并发进行请求,不用建立多条请求连接。

八三:开启 压缩数据优化:减小传输的数据大小,提升请求速度

在OKhttp的BridgeInterceptor桥接拦截器中会默认自动为我们开启gzip解压的支持

booleantransparentGzip=false;
if(userRequest.header("Accept-Encoding")==null&&userRequest.header("Range")==null){
transparentGzip=true;
requestBuilder.header("Accept-Encoding","gzip");
}

  九: 其他优化

1 、使用 webp 代替 png/jpg

2 、不同网络环境下载不同图片资源。
     

如(对于原图是300x300的图片):
2/3G使用低清晰度图片:使用100X100的图片;
4G再判断信号强度为强则使用使用300X300的图片,为中等则使用200x200,信号弱则使用100x100图片;
WiFi网络:直接下发300X300的图片

3http开启缓存 / 首页数据加入缓存

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

电量优化与网络优化 的相关文章

随机推荐

  • 在手机上通过ssh连接树莓派

    第一步 在手机上下载ConnectBot 豌豆荚上有的下 第二步 Ubuntu 上开启ssh服务 第一次按使用的话需要搭建环境 命令是 sudo apt get install openssh server 第三步 启动SSH服务 sudo
  • Yolov5训练自己的数据集

    本文介绍了如果通过Yolov5框架训练自己的数据集 主要内容包括数据集格式 数据集拆分方法 描述文件修改以及训练和测试方法 还没有搭建Yolov5环境的可以参考我上一篇博文 Yolov5目标检测环境搭建过程 Cuda Pytorch Yol
  • qsort库函数详解

    目录 一 qsort是什么 二 qsort的功能 三 qosrt函数详解 1 qsort函数的定义 2 qsort函数的传参 四 qsort的模拟实现 冒泡 1 如何实现交换 2 如何实现字节之间的交换 一 qsort是什么 qsort是C
  • C#.发布订阅模式

    发布订阅模式 委托可以通过简单的加减实现封装多个方法 但容易出现封装了多个方法的委托被赋值号一下子都给替换掉的问题 即外部对象会影响其他对象对发布者的订阅 委托类可以定义在发布者类之中吗 可以的 实现发布订阅模式的土方法 声明委托类 在发布
  • 关于生命的意义突然有感

    1 一个囚犯被判无期徒刑 放逐到一个海岛上 但不久附近发生海难 监狱不得不组织人手就近救援 这位囚犯十分神勇 一个救10个 于是由于被判表现良好放了 当一个人被判无期徒刑 世界上的乐趣几乎与他无关 他是最容易抑郁的人之一 但很明显 他一旦提
  • tongweb部署vue前端页面的方法

    tongweb部署vue前端页面的方法 1 在同一端口号下部署 2 在不同端口号部署 1 在同一端口号下部署 把vue项目install 运行 build完了的dist包压缩打包 上传到服务器解压 然后在解压完了的目录里新建一个空的WEB
  • 算法应用与加速器系统架构的碰撞:AI软硬结合的方向怎么走?

    2021年9月18日下午 算法应用与加速器系统架构的碰撞 讨论会在智源研究院顺利举行 参与封闭研讨的专家有 孙广宇 北京大学高能效计算与应用中心长聘副教授 黄高 清华大学助理教授 陈恺 中国科学院信息工程研究所研究员 施柏鑫 北京大学助理教
  • conda虚拟环境中安装和使用指定opencv-C++版本

    1 进入conda环境 conda activate 虚拟环境名称 2 查看conda可以安装的opencv版本 conda search opencv 3 安装opencv 这里安装4 5 3版本 conda install opencv
  • 【HarmonyOS】如何实现应用内引用HSP模块中ArkUI组件

    关键字 HSP开发 引入HSP模块中ArkUI组件 写在前面 在使用ArkTS开发HarmonyOS应用时 通常会定义一些公共组件或公共接口功能 此时可以将这些功能封装到HSP模块中 然后通过在HSP模块中导出组件或接口方式在其他模块中引用
  • 数据库的基础学习

    数据库对于程序员来说是一个必备的技能 我也开始了数据的学习 看的教程比较老 是郝斌的sqlsever基础教程 用的数据库是sqlsever2008 说起数据库 之前仿照的医药项目已经开始陆陆续续接触到了 所以也去3wschool上补过一些常
  • Queue(单项队列)和Deque(双端队列)的知识点整理

    1 Queue 单向队列 1 1 定义 常见队列就是FIFO 先进先出 队列 可以实现前端删除 peek pop from front 后端添加 push to back 的功能 1 2 实现 既可以用数组 顺序队列 也可以用链表 链式队列
  • shell中的三种引号

    元字符 指在shell中有特殊含义的字符 lt gt 双引号 消除元字符的特殊含义 除 三个字符外 均当作普通字符处理 单引号 除单引号自身外 都当作普通字符来处理 可以使用 来消除单引号的特殊语义 单引号 命令替换 将一个命令的输出作为另
  • ChatGPT影响大学生思想行为模式的三个维度

    ChatGPT作为新一代AI技术的代表 深刻嵌入并影响着大学生的日常学习和生活场景 其在提升学习研究效率 拓宽认知阈限 重塑人机互动模式等方面带来极大突破 也会对大学生的思想行为模式产生潜在的影响 这些影响可以从个体 关系与社会三个维度进行
  • 北师大19秋计算机在线1,北师19秋《专科英语(二)》在线作业1【满分答案】

    可做奥鹏全部院校作业论文 答案请添加qq 599792222 或 微信 1095258436 19秋 专科英语 二 在线作业1 试卷总分 100 得分 100 一 单选题 共 60 道试题 共 60 分 1 around all over
  • ctfshow CRYPTO RSA

    ctfshow CRYPTO RSA babyrsa easyrsa1 easyrsa2 easyrsa3 easyrsa4 easyrsa5 easyrsa6 easyrsa7 easyrsa8 babyrsa 先看txt 直接上脚本 i
  • Android绘制虚线

    Android绘制虚线的两种方式 1 自定义view 看到网上很多人说用drawLine绘制 但是其实根本就没有效果 真正效果的是drawPath这个方法 话不多说直接上代码 public class DotView extends Vie
  • 【云原生之Docker实战】使用docker部署mkdocs项目文档工具

    云原生之Docker实战 使用docker部署mkdocs项目文档工具 一 mkdocs介绍 1 mkdocs简介 2 mkdocs特点 二 检查本地环境 1 检查docker版本 2 检查docker状态 3 检查系统版本 三 下载mkd
  • VUE 开发使用的一些表格框架

    Vue 开发中使用的框架 表格 1 http www quasarchs com 2 https vxetable cn table start install
  • Spring Boot 实现 WebSocket 示例

    什么是 WebSocket WebSocket协议提供了一种标准化的方法 通过单个TCP连接在客户机和服务器之间建立全双工 双向的通信通道 它是一种不同于HTTP的TCP协议 但被设计为在HTTP上工作 使用端口80和443 并允许重用现有
  • 电量优化与网络优化

    一 Doze低电耗模式 未充电 屏幕熄灭 让设备在一段时间内保持不活动状态 延迟应用的后台 CPU 和网络活动 从而降低耗电量 二 Standby待机模式 应用待机模式会延迟用户近期未与之交互的应用的后台网络活动 三 白名单 系统提供了一个