首页 > 其他分享 >Android面试题:App性能优化之电量优化和网络优化

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

时间:2024-06-21 10:00:19浏览次数:13  
标签:面试题 请求 IP App 网络 DNS 优化 protobuf

本文首发于公众号“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

标签:面试题,请求,IP,App,网络,DNS,优化,protobuf
From: https://blog.csdn.net/myth13141314/article/details/139847245

相关文章

  • 轧机减速器优化设计与性能分析(论文)
    目录摘要………………………………………………………………………………ⅠABSTRACT………………………………………………………………………Ⅱ第一章、传动方案的拟定及说明1.1传动方案……………………………………………………………1第二章、电动机的选择2.1电......
  • 深度分析:React Native、Flutter、UniApp、Taro、Vue的差异
    深度分析:ReactNative、Flutter、UniApp、Taro、VueReactNative优势:跨平台代码共享:使用JavaScript和React,可以为iOS和Android开发应用,代码复用率高。活跃社区和生态系统:React和ReactNative有庞大的社区,提供了大量的第三方库和插件。热重载:开发效率高,修改代码后几乎......
  • uni-app实现扫码
    uni.scanCode(OBJECT)调起客户端扫码界面,扫码成功后返回对应的结果。平台差异说明AppH5微信小程序支付宝小程序百度小程序抖音小程序、飞书小程序QQ小程序快手小程序京东小程序√x√√√√√√√OBJECT参数说明参数名类型必填说明平台差异说明onlyFromCameraBoolean否是......
  • 粒子群优化在实际工程中的应用
    国际期刊 InternationalJournalofComplexityinAppliedScienceandTechnology,收录进化计算,机器学习和大数据方面的论文,网址:https://www.inderscience.com/jhome.php?jcode=ijcast 粒子群优化(PSO)算法因其简单、高效和灵活性在实际工程中的许多领域得到了广泛应用。......
  • 浅挖一下String类,解决String常见的面试题
    详解Java中的String类1.String是Java基本数据类型吗?许多同学在学习String类时,会误认为String类是基本数据类型,因为实实在在好像有点像C语言中的字符数组,字符,那不就是基本数据类型吗?可实际上不是的.在Java中String是个表示字符串的一个类,它是由字符组成的不可变......
  • 【全网最全最详细】JavaSE基础面试题(下)
    目录二十七、什么是BIO、NIO、AIO?二十八、SimpleDateFormat是线程安全的吗?二十九、如何解决SimpleDateFormat线程不安全的问题?三十、while(true)和for循环哪个性能好?三十一、Arrays.sort是使用什么排序算法实现的?三十二、String是如何实现不可变的?三十三、字符串常量......
  • 基于蝗虫优化的KNN分类特征选择算法的matlab仿真
    1.程序功能描述      基于蝗虫优化的KNN分类特征选择算法。使用蝗虫优化算法,选择最佳的特征,进行KNN分类,从而提高KNN分类的精度。 2.测试软件版本以及运行结果展示MATLAB2022a版本运行   3.核心程序[idx1,~,idx2]=dividerand(rows,0.8,0,0.2);Ptrain......
  • 接口性能优化之路
    1.批处理批量思想:批量操作数据库,这个很好理解,在循环插入场景的接口中,可以在批处理执行完成后一次性插入或更新数据库,避免多次IO。//批量入库batchInsert()//redis管道操作_,err=a.rc.TxPipelined(func(predis.Pipeliner)error{p.HSet(key,field,json.Marshal(&i......
  • Hive怎么调整优化Tez引擎的查询?在Tez上优化Hive查询的指南
    目录在Tez上优化Hive查询的指南调优指南理解Tez中的并行化理解mapper数量理解reducer数量并发案例1:未指定队列名称案例2:指定队列名称并发的指南/建议容器复用和预热容器容器复用预热容器一般Tez调优参数在Tez上优化Hive查询的指南在Tez上优化Hive查询无法采用一刀切的方法。查询......
  • 记录--单页面首屏优化,打包后大小减少64M,加载速度快了13.6秒
     ......