Android开发高手课
张绍文
前微信高级工程师,Tinker负责人
立即订阅
12609 人已学习
课程目录
已完结 61 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 焦虑的移动开发者该如何破局?
免费
导读 (1讲)
导读 | 如何打造高质量的应用?
模块一 高质量开发 (25讲)
01 | 崩溃优化(上):关于“崩溃”那些事儿
02 | 崩溃优化(下):应用崩溃了,你应该如何去分析?
03 | 内存优化(上):4GB内存时代,再谈内存优化
04 | 内存优化(下):内存优化这件事,应该从哪里着手?
05 | 卡顿优化(上):你要掌握的卡顿分析方法
06 | 卡顿优化(下):如何监控应用卡顿?
06补充篇 | 卡顿优化:卡顿现场与卡顿分析
07 | 启动优化(上):从启动过程看启动速度优化
08 | 启动优化(下):优化启动速度的进阶方法
09 | I/O优化(上):开发工程师必备的I/O优化知识
10 | I/O优化(中):不同I/O方式的使用场景是什么?
11 | I/O优化(下):如何监控线上I/O操作?
12 | 存储优化(上):常见的数据存储方法有哪些?
13 | 存储优化(中):如何优化数据存储?
14 | 存储优化(下):数据库SQLite的使用和优化
15 | 网络优化(上):移动开发工程师必备的网络优化知识
16 | 网络优化(中):复杂多变的移动网络该如何优化?
17 | 网络优化(下):大数据下网络该如何监控?
18 | 耗电优化(上):从电量优化的演进看耗电分析
19 | 耗电优化(下):耗电的优化方法与线上监控
20 | UI 优化(上):UI 渲染的几个关键概念
21 | UI 优化(下):如何优化 UI 渲染?
22 | 包体积优化(上):如何减少安装包大小?
23 | 包体积优化(下):资源优化的进阶实践
24 | 想成为Android高手,你需要先搞定这三个问题
模块二 高效开发 (9讲)
25 | 如何提升组织与个人的研发效能?
26 | 关于编译,你需要了解什么?
27 | 编译插桩的三种方法:AspectJ、ASM、ReDex
28 | 大数据与AI,如何高效地测试?
29 | 从每月到每天,如何给版本发布提速?
30 | 数据评估(上):如何实现高可用的上报组件?
31 | 数据评估(下):什么是大数据平台?
32 | 线上疑难问题该如何排查和跟踪?
33 | 做一名有高度的移动开发工程师
模块三 架构演进 (9讲)
34 | 聊聊重构:优秀的架构都是演进而来的
35 | Native Hook 技术,天使还是魔鬼?
36 | 跨平台开发的现状与应用
37 | 移动开发新大陆:工作三年半,移动开发转型手游开发
38 | 移动开发新大陆:Android音视频开发
39 | 移动开发新大陆: 边缘智能计算的趋势
40 | 动态化实践,如何选择适合自己的方案?
41 | 聊聊Flutter,面对层出不穷的新技术该如何跟进?
42 | Android开发高手课学习心得
练习Sample跑起来 (8讲)
练习Sample跑起来 | 热点问题答疑第1期
练习Sample跑起来 | 热点问题答疑第2期
练习Sample跑起来 | 热点问题答疑第3期
练习Sample跑起来 | 热点问题答疑第4期
练习Sample跑起来 | ASM插桩强化练习
练习Sample跑起来 | 唯鹿同学的练习手记 第1辑
练习Sample跑起来 | 唯鹿同学的练习手记 第2辑
练习Sample跑起来 | 唯鹿同学的练习手记 第3辑
特别放送 (7讲)
Android JVM TI机制详解(内含福利彩蛋)
专栏学得苦?可能是方法没找对
专栏学得苦?可能你还需要一份配套学习书单
Native下如何获取调用栈?
聊聊Framework的学习方法
Android工程师的“面试指南”
程序员修炼之路 | 设计能力的提升途径
结束语 (1讲)
结束语 | 移动开发的今天和明天
Android开发高手课
登录|注册

15 | 网络优化(上):移动开发工程师必备的网络优化知识

张绍文 2019-01-17
专栏前面我们已经学习过文件 I/O 和存储优化,相信你已经掌握了文件 I/O 和存储的性能分析以及优化思路。今天我们就再接再厉,继续学习系统中另外一种常见的 I/O——网络 I/O。
我在写今天的文章时,回想了一下大学期间学的那本几百页厚的《计算机网络》,当时学得也是云里雾里,网络的确涉及了方方面面太多的知识。那我们作为移动开发者来说,都需要掌握哪些必备的网络知识呢?文件 I/O 跟网络 I/O 又有哪些差异呢?
今天我们不谈“经典巨著”,一起来解决移动开发工程师面对的网络问题。

网络基础知识

现在已经很难找到一款完全不需要网络的应用,即使是单机应用,也会存在数据上报、广告等各种各样的网络请求。既然网络已经无处不在,我们必须要掌握哪些基础知识呢?
1. 无线网络
在过去十年,移动互联网的高速增长离不开无线网络的普及。无线网络多种多样,而且各有各的特点,并且适合使用的场景也不同。
下图是 iPhone Xs 支持的无线网络类型,你可以看到 WiFi、蜂窝网络、蓝牙、NFC 这些都是我们日常经常使用的无线网络类型。
“千兆级 LTE”指的是蜂窝网络在理论上速度可以达到光纤级别的 1Gbps(125MB/s)。虽然基于 4G 标准,但通过MIMO(多输入多输出)、使用载波聚合的LAA等技术,现在已经发展到千兆级 LTE。2020 年我们也即将迎来 5G 的商用,它的理论传输速率可以达到 20Gbps。目前 5G 的标准还没有完全 release,关于 5G 的原理我推荐你看看这篇文章
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Android开发高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(16)

  • snail24
    对课后作用的思考: 他们是如何实现网络不稳定的探测的?
    所谓不稳定,我的理解其实就是弱网络的判断,那么什么是弱网络?一般情况下,低于2G 网速,上行20kbps /下行 50kbps 就可以认为是弱网;当然,这个范围是见仁见智的,也可以更大一些;
    此时分为wifi连接上,但可用与不可用两种状态;
    不可用时的一种典型场景就是: 连上需要登录认证后使用的公共wfi ;
    所以问题就变成2个方面的判定:
    (1) 判定网络是否可用:
    这个最简单有效的办法就是向指定地址发起HTTP请求,服务端返回204响应码即可;这个也是Google 在 6.0 以上流量监控模块的实现方案;其他同学有提到ping 方案,呵呵,ping 一般是内部ip开放探测网络是否畅通的方案,但企业ip 一般是对外禁止ping的,因为会有安全攻击;所以ping 其实是行不通的;
    (2) 判断网络是否稳定:
    稳定的临界判断可以根据网络速度来判断,厂商一般会有流量统计模块,自然可以统计当下的wifi 传输速度,只要低于某个速度,甚至在某个时间内经常断开又连上,就可以判断为不稳定网络了。

    以上拙见,欢迎绍文老师以及其他同学指正O(∩_∩)O~

    作者回复: 这个不太好实现的,对于手机厂商来说,可以拿到更多底层的参数,答案在下一章有说

    2019-01-20
    1
    5
  • ming
    张老师我遇到一个问题就是Mars做长连接怎么能用jobservice兼容Android8.0以上版本,没有相应思路希望你能给我一些帮助谢谢

    作者回复: 这个简单来说就是如何保活,在耗电的章节会说到。
    但是8.0之后就已经非常难了,微信其实主要靠的是厂商白名单

    2019-01-17
    5
  • 像风
    5G延迟的数据从哪里来的?似乎不严谨啊。10ms的延迟是指多远的传输距离?光速绕地球一圈尚且要大约140毫秒,如果传输距离是地球的周长,怎么可能只有10ms?而且因为5G的频率较高,在不良导体中能量损耗严重,不能传输过远的距离,需要经过许多个基站转发,基站处理也需要时间啊。总觉得这个10ms像是上市公司为了热炒5G概念在“短距离内的两个端点端对端传输的延迟时间”...

    作者回复: 我是参考AT&T给出的数据

    2019-03-20
    1
  • 一片羽毛
    Wi-Fi信号强度高低,响应的速度快慢 判定切换?自主的ping 一个ip 来判断Wi-Fi 的速度
    2019-01-24
    1
  • xushengxing
    一开始比较朴素的想法:通过请求已知的,稳定的服务器,去请求应用的服务器。在这两个环节中,判定是网络问题,还是应用服务的问题。
    googl一下,发现WifiManager也可以获取连接速度,信号强度这些指标。

    作者回复: 对于厂商可以拿到更加底层的参数

    2019-01-18
    1
  • Nick
    课后题:如何实现侦测,如何区分是应用后台服务器出问题还是 WiFi 本身有问题呢?
    ----我的想法是当使用wifi网络不稳定时,直接切到移动网络,如果使用稳定,那么WiFi网络有问题,切到移动网络是合适的。
    2019-09-13
  • 大土豆
    4G还分td-lte和fdd-lte😃
    2019-03-09
  • 荆明
    关于课后作业,如何侦测网络,是在哪一章回复的?后面几章好像没看到回复这个问题

    作者回复: Link turbol?后面正文里面说了答案了

    2019-02-26
  • 王亮
    如何实现侦测,如何区分是应用后台服务器出问题还是 WiFi本身有问题呢

    是不是可以尝试百度等比较稳定的服务,以此来判断是后台出了问题,还是wifi传输出现拥堵

    作者回复: 对于手机厂商来说,这样不是好的方式。下一章会有答案

    2019-01-29
  • 检测到路由器的丢包率就可以判断啦
    2019-01-23
  • 董尚斌
    理论上后台挂掉的话,请求是5xx错误码。
    通过http的响应码就可以区分。

    作者回复: 如果有返回码,已经代表是可以联通了。

    2019-01-21
  • 欧哩給
    做App的流量使用统计有什么方法呢?

    作者回复: 后面会讲到

    2019-01-17
  • ZYW
    我说个最简单的思路,连上WIFI.ping 一个公有ip,如果通过就说明可以,如果不行就说明WIFI网络不可达,这期间还可以做 丢包获取看网络的丢包率。

    作者回复: 公网ip也无法确定有没有问题,下一章会有答案,其实是不需要的

    2019-01-17
  • 凡式galaxy
    怎么区分是wifi问题还是应用后台问题?

    作者回复: 在后面一章会有答案哈

    2019-01-17
  • 银酱
    希望后面能出个怎么优化网络相关的内容,最近正打算优化网络,发现okhttp有时候会遇到网络良好但请求失败的情况

    作者回复: 下一节就会讲

    2019-01-17
  • Akon Convict
    改完bug前来学习一波知识
    2019-01-17
收起评论
16
返回
顶部