Android面试题--网络优化

本文探讨了移动APP网络优化的方法,包括避免DNS解析、合并网络请求、预先获取数据、优化重连机制、离线缓存、压缩数据大小、使用CDN等,旨在提升APP性能,节省流量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

移动端APP计划都是互联网的,通过网络请求从服务端获取数据,网络的延迟等会对APP的性能产生较大的影响,如何优化网络?网路优化除了可以节省网络流量,节省电脑,还可以提高应用的响应,在Android平台上可以采取以下措施来改善应用的网络请求

避免DNS解析

DNS是域名系统,它的主要功能是根据应用请求所用的域名URL去网络上面映射表中查找对应IP地址,这个过程可能会需要上百毫秒的时间,而且可能会存在DNS劫持的危险,根据具体的业务需求,我们可以使用IP直连的方式来代替域名访问的方式,从而达到更快的网络请求。使用IP的坏处是不够灵活,当对应的服务因为某些IP地址发生变化后,客户端就访问不了了。因此IP方式需要增加动态更新的能力,或者在IP方式访问失败时,切换到域名访问方式。

合并网络请求

一次完整的HTTP请求,首先需要进行DNS查找,接着通过TCP三次握手,从而建立连接;如果是HTTPS请求,那么还需要经过TLS握手成功后连接才建立。因此对于网络请求应该尽量减少请求的接口,能够合并网络请求就尽量合并。

预先获取数据

预先获取数据能够将网络请求集中在一次,这样其他时间段手机就可以切换到空闲状态,从而避免经常性的唤醒和空闲,起到节省电量的作用。

避免轮询

轮询是指客户端每隔一段时间就向服务端主动发起网络请求,如果存在需要的数据就拉取,没有的话就继续等待下一次轮询。一般情况下不建议在应用中使用轮询操作,能够使用推送来替换的尽量使用推送。在不得已的情况下,也要避免使用Thread.sleep()函数来循环等待,比较好的做法是使用系统AlarmManager来实现定时轮询,AlarmManager可以保证在系统休眠时CPU也可以得到休眠,在下一次需要发起网络请求的时候才唤醒。

优化重连机制

尽量避免在网络请求失败时,无限制的循环重试连接,可以设定一个最大重连次数。超过次数限制之后结束重连,等一段较长时间后再尝试连接,或者把是否重连的问题抛给使用者根据具体的业务需求确定。

离线缓存

对于类似图片,文件等数据,可以使用内存缓存+外存缓存的方式实现二级缓存策略,当在缓存中命中对应的图片或者文件时,直接从缓存中读取,无需走网络请求,不仅避免网络延迟,还节省来用户的流量。在Android中,典型的是使用LruCache实现内存缓存,DisLruCache实现外存缓存,对于图片,已经有很多开源框架可供选择。

压缩数据大小

从节省网络流量和提高应用响应等方面出发,我们需要减少网络上面的传输的数据,对于客户端来说,可以对发送给服务端的数据进行gizp压缩;同时可以选用更优的数据传输格式,例如可以使用二进制方式代替JSON格式,使用WebP图片格式代替JPEG或者PNG图片格式等。

不同的网络环境使用不同的超时策略

应用中应该根据当前的网络类型来设置不同的网络超时时间,常见的网络类型2G,3G,4G 和WI-FI。为了实时更新当前网络类型,可以通过监听ConnectivityManager.CONNECTIVITY_ACTION的变化来获取最新的网络类型,并动态调整网络超时时间。

CDN的使用

CDN的全程是内容分发网络,它的基本思想是尽可能避开网络上可能影响数据传输速度和稳定性的环节,从而实现更快,更稳定的数据传输,CDN加速能够环境电信核心网络延迟带来的影响。

网络优化工具

  • NetworkProfiler
  • 抓包工具
  • Stetho

使用NetworkProfiler需要在应用启动过程中开启高级选项

  1. run>edit configurations
  2. 勾选enable advanced profiling
  3. apply>profile模式部署
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值