Android面试题:App性能优化之电量优化和网络优化

news2024/12/27 11:10:44

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

电量优化

Doze模式
  • 系统的行为
  • 进入Doze后看看App有没有奔溃就可以
Standby待机模式
  • 针对某个应用

处于上述模式,App会无法访问网络

解决方案
  • 可以手动申请权限让用户把App加入白名单

  • 或者注册电池电量变化广播,当处于充电状态时才做一些上报日志等操作(8.0以后广播要动态注册,manifest文件注册失效)

  • WorkManager,不过部分国内的手机可能会不支持

电量工具
Battery Historian
AS 的 Energy Profile
  • 支持8.0以上
电量优化
  • 减少操作:比如网络请求,可以考虑缓存数据
  • 推迟操作:比如等连接WiFi再上传日志
  • 合并操作:比如服务器接口合并

网络优化

网络请求流程:

DNS -> IP -> Socket(Tcp/IP) -> IO发送Http报文
DNS优化: HTTPDNS
  • 传统DNS解析是UDP协议

  • HTTPDNS是Http协议,阿里云的HTTPDNS就是先用固定IP解析DNS,不行就再用域名解析

  • 由于 HttpDns 是通过 IP 直接请求 HTTP 获取服务器 A 记录地址,不存在向本地运营商询问domain 解析过程,所以从根本上避免了劫持问题

  • DNS 解析由自己控制,可以确保根据用户所在地返回就近的 IP 地址,或根据客户端测速结果使用速度最快的IP

  • 一次请求解析多个域名

Keep alive

Okhttp请求头里默认就设置为true,需要服务同意,服务端也可能会关掉

  • socket可以重复使用
  • Http1.1一次只处理一个请求,虽然可以复用,但如果同时请求多个连接,就需要再创建新的socket
  • http2提出了多路复用,也同样是复用一个连接,不过这条连接支持同时处理多条请求,所有请求都可以在这条连接上进行。
  • 多路复用把在连接里传输的数据都封装成一个个stream,每个stream都有标识,stream的发送和接收可以是乱序的,不依赖顺序,也就不会有阻塞的问题,接收端可以根据stream的标识去区分属于哪个请求,再进行数据拼接,得到最终数据。
  • OKhttp3以上版本支持了http2
数据压缩
protobuf

目前最流行的两种数据格式是 json 和 protobuf,json 是字符串,protobuf 是二进制,即使用各种压缩算法压缩后,protobuf 仍会比 json 小,数据量上 protobuf 有优势,序列化速度 protobuf 也有一些优势。

  • 需要服务端也支持
  • AS上面可以安装一个插件:Protocol Buffer Editor
  • 然后需要依赖Google官方的 javalite依赖
  • 如果要编译时自动将proto文件转成Java,需要安装Google的gradle插件protobuf-gradle-plugin
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.13'
apply plugin: 'com.google.protobuf'
implementation 'com.google.protobuf:protobuf-javalite:3.11.0'
gzip

http可以对内容body部分编码,OKhttp中已经加了请求头("Accept-Encoding", "gzip"),如果服务器支持,并且返回内容响应头里有Content-Encodin:gzip,OKhttp就会帮我们解压

  • 需要服务器支持
其他优化

1、使用webp代替png/jpg

2、不同网络的不同图片下发,如(对于原图是300x300的图片):

  • 2/3G使用低清晰度图片:使用100X100的图片;
  • 4G再判断信号强度为强则使用使用300X300的图片,为中等则使用200x200,信号弱则使用100x100图片;
  • 这个需要和服务端合作,客户端可以在请求头里面加入当前用户的手机网络状态

WiFi网络:直接下发300X300的图片

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


欢迎关注我的公众号AntDream查看更多精彩文章!

AntDream

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1846432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot中的各种事件

spring boot 各种事件贯穿整个启动的生命周期,读懂了这些事件也差不多理解了springboot的启动流程。 SpringApplicationRunListener中的事件 接口org.springframework.boot.SpringApplicationRunListener定义了spring启动过程中各个事件被触发的顶层方法 public …

内容安全复习 1 - 信息内容安全概述

文章目录 信息内容安全简介网络空间信息内容安全大模型 人工智能简介 信息内容安全简介 网络空间 网络空间是融合物理域、信息域、认知域和社会域,控制实体行为的信息活动空间。 上图展示了网络空间安全的结构。可以看到将网络空间划分为了网络域和内容域两个部分。…

图片的格式怎样在线转换?在线改图片格式的操作技巧

图片作为日常生活中常用的内容展示方式,面对不同的用途图片的格式也是不同的,那么怎样快速完成图片格式转换呢?通过软件来修改图片格式比较麻烦,现在可以在网上使用图片格式转换器工具来在线改图片格式,这种方式会更加…

RK3568技术笔记十六 QT5开发

背景知识 在阅读本章前,如果对下面所列举的知识点有一定的了解,将有助于更好的理解本章内容。 C基础知识,了解简单的类,继承,重载等面向对象概念;Linux基础知识,了解基本的Shell命令&#xff…

谷歌Chrome浏览器排查js内存溢出

1. 打开谷歌浏览器检查台 2. 点击memory 3. 点击开始快照录制,时隔一会儿录一次,多录几次 4. 进行快照对比

TMS与WMS海外仓系统:两者分别是什么、区别、结合使用的好处

TMS国际物流系统和WMS海外仓系统都旨在提升海外仓储物流作业的效率,不过他们在供应链中却各自发挥着不同的作用。 今天我们会深入的给大家介绍两者分别是什么,区别在哪,结合使用TMS国际物流系统和WMS海外仓系统的好处是什么。 1、了解WMS海…

AI+前端技术的结合(实现图片识别功能)

随着人工智能技术的不断发展,AI在前端设计页面中的应用变得越来越普遍。比如:在电商平台上,可以利用对象检测技术实现商品的自动识别和分类;人脸识别;车辆检测;图片识别等等......其中一个显著的应用是在图…

爆火的AI姓名头像号篇篇10w+, 流量主赚麻了...

最近二师兄在刷公众号时,看到一个非常有趣的账号。简单又“暴li”。 几乎篇篇10w。点击去一看,内容也是非常极简,利用姓氏生成头像。一个字都不多。 几乎每篇文末都有广告,一篇10w按照800来算, 一个月大概 ~~一七得七、…

【SPIE出版】第六届无线通信与智能电网国际会议(ICWCSG 2024,7月26-28)

随着科技的飞速发展和能源需求的日益增长,智能电网技术逐渐成为电力行业的重要发展方向。与此同时,无线通信技术在近年来也取得了显著的进步,为智能电网的发展提供了强有力的支持。为了进一步推动无线通信与智能电网的结合与发展,…

手机拍照如此强,还有买相机的理由么?

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 我们见证了关于摄影工具的世纪之争。 尽管手机摄影技术飞速发展,但传统相机的忠实拥趸们认为…

Flink入门实战详解

Flink入门实战 Flink项目构建 1)基于MavenIdea创建项目&#xff1a; 使用maven进行项目构建&#xff0c;如图1所示。 图-34 构建maven项目 输入项目中的maven的坐标和存储坐标&#xff0c;如图2所示。 图2 maven坐标和存储位置 2)Maven依赖&#xff1a; <properties>…

BEVM基于OP-Stack发布首个以WBTC为GAS连接以太坊和比特币生态的中继链

为了更好的连接以太坊和比特币生态&#xff0c;BEVM团队正在基于OPtimism的OP Stack来构建一个以WBTC为GAS兼容OP-Rollup的中继链&#xff0c;这条中继链将作为一种完全去中心化的中间层&#xff0c;把以太坊上的主流资产(WBTC/ ETH/USDC/USDT等)引入到BEVM网络。 不仅如此&am…

最新扣子(Coze)实战案例:扣子卡片的制作及使用,完全免费教程

&#x1f9d9;‍♂️ 大家好&#xff0c;我是斜杠君&#xff0c;手把手教你搭建扣子AI应用。 &#x1f4dc; 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》&#xff0c;完全免费学习。 &#x1f440; 关注斜杠君&#xff0c;可获取完整版教程。&#x1f44d;&#x1f3f…

Element-UI实现el-dialog弹框拖拽功能

在实际开发中&#xff0c;会发现有些系统&#xff0c;弹框是可以在浏览器的可见区域自由拖拽的&#xff0c;这极大方便用户的操作。但在查看Element-UI中弹框&#xff08;el-dialog&#xff09;组件的文档时&#xff0c;发现并未实现这一功能。不过也无须担心&#xff0c;vue中…

GaussDB关键技术原理:高性能(一)

引言 对数据库性能进行优化是令人激动的&#xff0c;无论是对其进行性能需求分析、性能需求设计、性能问题定个位都是富于变化又充满挑战的工作&#xff0c;本章围绕“数据库性能”进行全面系统化的介绍&#xff0c;首先从数据库在现代软件栈中所处的位置出发&#xff0c;介绍…

车载模块负载基础认识

车载模块负载是指车辆上的各种电子设备和系统&#xff0c;如导航系统、音响系统、空调系统、安全气囊等。这些设备和系统在车辆运行过程中需要消耗一定的电能&#xff0c;以保证其正常工作。车载模块负载的基础认识主要包括以下几个方面&#xff1a; 1. 负载类型&#xff1a;车…

计算机毕业设计Python+Spark音乐推荐系统 音乐数据分析 音乐可视化 音乐爬虫 音乐大数据 大数据毕业设计 大数据毕设

2023届本科生毕业论文&#xff08;设计&#xff09;开题报告 知识图谱音乐推荐系统 学 院&#xff1a; XXX 专 业&#xff1a; XXX 年 级 班 级&#xff1a; XXX 学 生 姓 名&#xff1a; XXX 指 导 教 师&#xff1a; XXX 协助指导教师&#xff1a; …

收藏丨世界地形图(超高清)

原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4Mg&mid2247668146&idx2&snbebd2f4921994ab05ed47efdebe8e706&chksmfa770e8fcd008799bf1d1cabd62edca7f60a5c7a1ef9c0bacf3bdc102bccf0f12d54d6c07c49&token1405091246&langzh_CN&scene21#we…

[信号与系统]模拟域中的一阶低通滤波器和二阶滤波器

前言 不是学电子出身的&#xff0c;这里很多东西是问了朋友… 模拟域中的一阶低通滤波器传递函数 模拟域中的一阶低通滤波器的传递函数可以表示为&#xff1a; H ( s ) 1 s ω c H(s) \frac{1}{s \omega_c} H(s)sωc​1​ 这是因为一阶低通滤波器的设计目标是允许低频信…

Java 中 String 类

目录 1 常用方法 1.1 字符串构造 1.2 字符串包含的成员 1.3 String 对象的比较 1.4 字符串查找 1.5 转化 1.5.1 数值和字符串转化 1.5.2 大小写转化 1.5.3 字符串转数组 1.5.4 格式化 1.6 字符串替换 1.7 字符串拆分 1.8 字符串截取 1.9 其他操作方法 1.10 字符…