[usb专题]别让 USB 传输速度影响 Android 开发效率

别让 USB 传输速度影响 Android 开发效率

概览

迭代速度是构建高质量 Android 应用的关键要素。处理的速度越快,应用程序的体验就越顺畅。这篇文章将和大家聊聊如何优化部署时间。
在这里插入图片描述

部署

在 Android Studio 3.5 版本中,我们在多个方面改进了迭代速度。开发者可以使用 Apply Changes: 根据代码结构,它可以替换更改的代码,并且重启当前 Activity; 如果代码和 Activity 生命周期无关,则会调用 “Apply Code Changes” 来仅替换代码而不会重启正在运行的 Activity。
在这里插入图片描述
Apply Changes 带来了两种全新的应用程序部署方式

基于 Apply Changes,Android Studio 3.5 新增了 “Delta Push”,在下次调用 Run 的时候,他只会把 APK 中修改的部分推送到设备上。应用程序会通过 sendfile(2) 命令将新旧资源发送给 Package Manager 并且在设备上进行重构,以此来达到 “零拷贝” 安装。

这些机制组合起来减少了安装时间,不过要想得到较好的优化效果,开发者还需要注意设备数据线传输的速度和稳定性。


为什么 USB 传输速度很重要

无论 “Delta Push” 是否被启用,总会有数据传输到设备上。如果用的是模拟器,数据会通过 TCP/IP 进行传输,但是如果用的是真机则会用到 USB,USB 传输速度越快,等待时间越短,程序迭代速度也就越快。

好消息是 USB 传输速度现在越来越快了: 1996 年时,USB 仅能够提供 12 Mb/s 的传输速度,到了 2019 年 8 月发布 USB 4.0 版本的时候,已经可以达到几个 Gb/s 的速度了
在这里插入图片描述
从 1996 到 2019,USB 传输速率从 1.5Mbps 提高到了 40GBps

如果不去深究,USB 其实是一个较为简单的技术。只要两台设备所支持的 USB 版本相同,用 USB 连接线相连就可以用了,客户端层不用作出任何修改,用起来易如反掌。

对开发者来说,拥有高速的 USB 传输至关重要。传输速度达到一定程度以后,USB 传输速度和程序迭代速度就会关联起来,手机存储的写入速度可能无法达到 USB 3.2 的 20Gb/s,不过还是比 USB 2.0 要快,所以如果您安装调试一个 50M 大小的 APK,USB 3.0 协议的传输速度会比使用 USB 2.0 协议快 25%,一天下来能节省下的时间应该不少:
在这里插入图片描述
安装一个 50 MB 的应用,USB 3.0 比 USB 2.0 快 30%

但坏消息是,USB 3.0 的设备常常以 USB 2.0 的速度在传输数据。有两种方式会导致这种情况,要么线出现问题,要么集线器出现问题。
避免降低 USB 连接的传输速度

有三个基本原则可以避免 USB 降速的问题:

找蓝色接口
了解 USB-C
选择合适的 USB 集线器

找蓝色接口

如果您用的是 Type-A 或者 Type-B 接口,那就简单了。USB 3.0 标准里建议通过颜色来区分专门连接到 USB 3.X 硬件的接口。如果您看到下面图片中的接口,那么说明您接对接口了。

USB Type-A:
在这里插入图片描述
左侧是 USB Type-A 母口,右侧是 USB Type-A 公口

USB Type-B:
在这里插入图片描述
左侧是 USB Type-B 母口,右侧是 USB Type-B 公口
了解 USB-C

USB-C 接口和 USB 3.1 几乎同时发布。很多人以为他们之间有联系,但是其实他们毫不相干。

USB 2.0 数据线中有四根线缆。其中两根用于供电,另外两根用于数据传输。

在这里插入图片描述
一条 USB 2.0 数据线中含四根线缆

USB 3.X 数据线完全向下兼容。它含有两条线缆用于 USB-2 信号传输,还有两组双绞线用于 USB-3 的上行和下行数据。
在这里插入图片描述

USB 3.0+ 数据线含有 8 根线缆

从传输数据角度看,USB Type-C 只是一种新的接口形态,并且它不会探测线缆连接的数量,换句话说就是,它并不关心另一端的传输协议是高速的 USB 3.X 协议还是相对低速的 USB 2.0 协议,加之其造价低廉,导致很多数据线用的虽然是 Type-C 接口,但数据传输还是走 USB 2.0 的协议。

在这里插入图片描述
△ Nexus 6P 标配的 Type-A 转 C 数据线

上图所示是 Nexus 6P 手机标配的数据线,这台手机是使用 USB 2.0 协议,并通过 USB Type-C 接口连接,这些数据线中只有 4 根线缆。

如果您用的是这样的数据线接入开发环境的话,很有可能您在用低速连接 USB-3 兼容设备。原因是在开发过程中,如果您一直在使用 Nexus 6P 的这条数据线连接其他不同的手机 (部分手机的 Type-C 接口可能会使用 USB 3.0 协议,而这条数据线最高只能有 2.0 协议的速度),那您的整体开发体验和开发效率可能会降低不少。

所以当使用 USB Type-C 接口的时候,确保上面有 SS (SuperSpeed) 的标志。
在这里插入图片描述
△ USB Super-Speed 标志

对于手机接口使用哪个协议,可以查看设备的相关参数。即使是近期发布的手机也有可能使用 2.0 低速接口,比如 Pixel 3a 和 Pixel 3a XL。

选择合适的 USB 集线器

最后一个要避免的错误操作就是避免使用较差质量的 USB 集线器产品 —— 它的效果和用错线是一样的。USB 集线器可以把您所有的设备都串联到一起 (从键盘、鼠标、到开发设备)。但是很多集线器产品都是用于一些轻量级低速设备,比如键盘、鼠标和耳机,这些设备仅需要 USB 2.0连接。

确认一下您的 USB 集线器是否支持 USB 3.0,看一下它的接口是不是蓝色的,如果接口只有 Type-C,可以看一下说明书。

实用工具

如果您仍有疑虑,可以通过下面命令看一下您的 USB 设备和宿主机之间的速度。

Mac 系统: system_profiler SPUSBDataType
Linux 系统: lsusb -vvv
Windows 系统: USBView.exe

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值