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

简介: 这篇文章讨论了Android应用的电量和网络优化。电量优化涉及Doze和Standby模式,其中应用可能需要通过用户白名单或电池广播来适应限制。Battery Historian和Android Studio的Energy Profile是电量分析工具。建议减少不必要的操作,延迟非关键任务,合并网络请求。网络优化包括HTTPDNS减少DNS解析延迟,Keep-Alive复用连接,HTTP/2实现多路复用,以及使用protobuf和gzip压缩数据。其他策略如使用WebP图像格式,按网络质量提供不同分辨率的图片,以及启用HTTP缓存也是有效手段。

本文首发于公众号“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查看更多精彩文章!

目录
相关文章
|
2月前
|
Android开发 数据安全/隐私保护 开发者
Android自定义view之模仿登录界面文本输入框(华为云APP)
本文介绍了一款自定义输入框的实现,包含静态效果、hint值浮动动画及功能扩展。通过组合多个控件完成界面布局,使用TranslateAnimation与AlphaAnimation实现hint文字上下浮动效果,支持密码加密解密显示、去除键盘回车空格输入、光标定位等功能。代码基于Android平台,提供完整源码与attrs配置,方便复用与定制。希望对开发者有所帮助。
|
25天前
|
存储
《仿盒马》app开发技术分享--未完成订单列表展示逻辑优化(61)
上一节我们实现订单与优惠券的联合提交时,我去到订单列表页面查看生成的订单信息,发现现在的订单从信息展示到价格计算全都是有问题的。所以紧急的把对应的问题修改一下。
117 70
|
12天前
|
存储 Android开发 数据安全/隐私保护
Thanox安卓系统增加工具下载,管理、阻止、限制后台每个APP运行情况
Thanox是一款Android系统管理工具,专注于权限、后台启动及运行管理。支持应用冻结、系统优化、UI自定义和模块管理,基于Xposed框架开发,安全可靠且开源免费,兼容Android 6.0及以上版本。
60 4
|
25天前
|
数据库
《仿盒马》app开发技术分享-- 优惠券逻辑优化(58)
我们已经实现了优惠券的领取和展示,现在已经趋近于一个完整的电商应用了,但是这时候问题又来了,我们领取完优惠券之后,我们的新用户优惠券模块依然存在,他并没有消失,既然我们是从云数据库中查询的数据,那么我们需要找到一个字段跟他对应起来,来实现新用户领券后关闭这个模块的展示,同时我们在未登录的时候他也要保持隐藏,登录后能实现优惠券的领取。然后在结算的时候得出有几张符合的券能用
33 9
|
20天前
《仿盒马》app开发技术分享-- 逻辑优化第三弹(83)
现在我们的app功能已经趋近完善,bug和缺失的细节也越来越少了,我们继续对app进行优化,首先是我们的积分页面,我们只实现了全部的积分展示内容,对收入和支出的积分明细并没有进行展示,这里我们要实现一下,然后就是我们的优惠券,我们已过期的优惠券并没有修改状态为已过期。
24 0
|
20天前
|
数据库
《仿盒马》app开发技术分享-- 逻辑优化第二弹(82)
这一节我们继续对我们已有的业务逻辑进行优化,在积分兑换完商品后我们回到积分展示页面发现积分的数量并没有减少,而是重新进入才会发生变化,上一节我们实现商城订单的确认揽收之后继续在待收货页面实现确认揽收按钮的业务逻辑。
25 0
|
20天前
《仿盒马》app开发技术分享-- 逻辑优化第一弹(81)
随着上一节我们兑换商品订单相关逻辑的实现,我们的app功能已经更加的完善了,接下来我们开始对整个app缺失的小功能以及对已有的功能bug进行优化和逻辑的新增,这一节我们新增的功能是,商城订单的揽收 功能,兑换订单的取消后积分退回功能,如果不实现积分退回,就会出现用户兑换后取消订单,但是积分已经消耗的情况
18 0
|
20天前
《仿盒马》app开发技术分享-- 个人中心页优化(62)
上一节我们实现了订单逻辑的优化,现在我们的app功能更加的完善了,并且随着我们的迭代逻辑疏漏越来越少,现在我们继续进行优化,在之前的业务逻辑中我们的个人中心页面展示了用户的余额以及积分商城入口,这里我们要展示余额准确的值,积分商城的入口我们修改为积分相关的功能入口。并且展示当前账号的积分余额
18 0
|
25天前
|
存储 安全
《仿盒马》app开发技术分享-- 购物车逻辑优化(39)
我们的app主要购物功能已经开发的相对来说比较完善了,接下来就针对各个功能的逻辑性进行迭代和修改,让我们的程序更加的健壮,减少一些逻辑上的bug
17 0
|
3月前
|
数据采集 JSON 网络安全
移动端数据抓取:Android App的TLS流量解密方案
本文介绍了一种通过TLS流量解密技术抓取知乎App热榜数据的方法。利用Charles Proxy解密HTTPS流量,分析App与服务器通信内容;结合Python Requests库模拟请求,配置特定请求头以绕过反爬机制。同时使用代理IP隐藏真实IP地址,确保抓取稳定。最终成功提取热榜标题、内容简介、链接等信息,为分析热点话题和用户趋势提供数据支持。此方法也可应用于其他Android App的数据采集,但需注意选择可靠的代理服务。
137 11
移动端数据抓取:Android App的TLS流量解密方案

热门文章

最新文章