专栏首页三流程序员的挣扎Android 优化——网络优化

Android 优化——网络优化

Android 优化目录


利用 Network Profiler 检查网络流量

  1. 接口设计
    • API设计 App 与 Server 之间的 API 设计要考虑网络请求的频次,资源的状态等。以便 App 可以以较少的请求来完成业务需求和界面的展示。 比如注册登录一般会有两个 API,但是设计 API 时应该给注册接口包含一个隐式的登录。来避免 App 在注册后还得请求一次登录接口(有可能失败,从而导致业务流程失败)。 比如有些请求可能包含了几种小请求,可以单独设计个接口,减少请求次数。
    • Gzip 压缩 使用 Gzip 来压缩 request 和 response,减少传输数据量,从而减少流量消耗。
    • 考虑使用 Protocol Buffer/flatBuffer 代替 JSON
    • 图片的 Size 图片相对于接口请求来说,数据量要大得多。故而也是需要优化的一个点。可以在获取图片时告知服务器需要的图片的宽高,以便服务器给出合适的图片,避免浪费。以七牛为例,可以在请求图片的 url 中添加诸如质量,格式,width,height 等 path 来获取合适的图片资源。对于不同的设备不同网络返回不同的内容不同分辨率图片。
    • 增量更新 需要数据更新时,可考虑增量更新。如常见的服务端进行 bsdiff,客户端进行 bspatch。
    • 大文件下载 支持断点续传,并缓存 Http Resonse 的 ETag 标识,下次请求时带上,从而确定是否数据改变过,未改变则直接返回 304。
  2. 网络缓存,减少延迟节省流量。
  3. 打包网络请求 当接口设计不能满足业务需求时。例如可能一个界面需要请求多个接口,或是网络良好,处于 Wifi 状态下时我们想获取更多的数据等。这时就可以打包一些网络请求,例如请求列表的同时,获取 Header 点击率较高的的 item 项的详情数据,响应体里包含更多的内容。
  4. 监听相关状态 监听设备的状态:休眠状态、充电状态、网络状态,结合 JobScheduler 来根据实际情况做网络请求。比方说 Splash 闪屏广告图片,可以在连接到 Wifi 时下载缓存到本地; 新闻类的 App 可以在充电,Wifi 状态下做离线缓存。
  5. 弱网优化 除了正常的网络优化,还需考虑到弱网情况下 App 的表现。 一般来说,网络延迟在 60ms 内是 OK 的,超过 200ms 就比较糟糕了。弱网优化,本质上是在弱网的情况下能让用户流畅的使用。
    • 压缩/减少数据传输量
    • 利用缓存减少网络传输
    • 针对弱网(移动网络),不自动加载图片
    • 界面先反馈,请求延迟提交。例如,用户点赞操作,可以直接给出界面的点赞成功的反馈,使用 JobScheduler 在网络情况较好的时候打包请求。
  6. 建立取消机制,页面跳走了要取消请求,且不再接收数据。
  7. GET 请求失败增加重试机制,POST 请求可能因为延时,不要有重试机制,要防止频繁请求相同的接口。重试机制必须要有明显的结束条件。
  8. 避免重复上传与下载。避免轮询。
  9. IP 直连,避免 DNS 解析,即耗时又有被劫持风险。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android 优化——卡顿优化

    Android 系统每隔 16ms 会发出 VSYNC 信号重绘界面(Activity)。之所以是 16ms,是因为 Android 设定的刷新率是 60FPS...

    七适散人
  • Dart 笔记 8 - 类(1)

    Dart 是一种面向对象的语言,具有类和基于 mixin 的继承。每个对象都是一个类的实例,所有的类都是 Object 的子类。

    七适散人
  • Android 动画总结(6) - 估值器

    七适散人
  • 推荐三款我常备开发辅助神器

    五一假期过完了,大家都去哪些地方浪了?上班第一天是不是倍感无趣?哈哈,不要紧,今天我来给大家推荐几个神器,让你明天神清气爽,这可是程序员开发必备之良品呀。

    大愚
  • 文加图, 理解Http请求与响应

    在讲解OkHttp之前, 我们首先来个高清大图, 看下http请求的整个步骤, 有个整体概念.

    望天
  • 领导叫我做接口测试,我好慌!

    不要慌,问题不大! 此文主要献给在工作中接触接口测试,在群里咨询,公司叫我测试接口我该怎么去进行?测试用例怎么设计呢?还有我都不知道该怎么下手。我们来从做接口测...

    测试小兵
  • 接口测试其实很简单

    在软件行业中,软件测试算是入行门槛比较低的工作了,相信有很多小伙伴是在犹豫要不要转行做测试,或者又担心没有测试基础怎么办,作为测试,我认为必会的就是接口测试了,...

    小雯子打豆豆
  • 接口测试基础

      测试人员通常所说的“接口测试”是针对系统各组件之间接口的一种测试,它属于功能测试。接口能测出普通界面操作难以发现的问题。如,我们都知道系统是由前端后端组成,...

    小老鼠
  • 接口(interface)和抽象类(abstract class)的区别是什么

    happyJared
  • 用 Python 监控知乎和微博的热门话题

    本文来自编程教室的一名学员 TED 同学,这是他目前正在参与的项目开发小组中的一部分工作,涉及到一些常用的爬虫方法。今天拿出来跟大家分享一下。

    Crossin先生

扫码关注云+社区

领取腾讯云代金券