迭代速度是構建高質量 Android 應用的關鍵要素。處理的速度越快,應用程序的體驗就越順暢。這篇文章將和你們聊聊如何優化部署時間。工具
在 Android Studio 3.5 版本中,咱們在多個方面改進了迭代速度。開發者可使用 Apply Changes: 根據代碼結構,它能夠替換更改的代碼,而且重啓當前 Activity; 若是代碼和 Activity 生命週期無關,則會調用 "Apply Code Changes" 來僅替換代碼而不會重啓正在運行的 Activity。優化
△ Apply Changes 帶來了兩種全新的應用程序部署方式spa
基於 Apply Changes,Android Studio 3.5 新增了 "Delta Push",在下次調用 Run 的時候,他只會把 APK 中修改的部分推送到設備上。應用程序會經過 sendfile(2) 命令將新舊資源發送給 Package Manager 而且在設備上進行重構,以此來達到 "零拷貝" 安裝。3d
這些機制組合起來減小了安裝時間,不過要想獲得較好的優化效果,開發者還須要注意設備數據線傳輸的速度和穩定性。調試
不管 "Delta Push" 是否被啓用,總會有數據傳輸到設備上。若是用的是模擬器,數據會經過 TCP/IP 進行傳輸,可是若是用的是真機則會用到 USB,USB 傳輸速度越快,等待時間越短,程序迭代速度也就越快。xml
好消息是 USB 傳輸速度如今愈來愈快了: 1996 年時,USB 僅可以提供 12 Mb/s 的傳輸速度,到了 2019 年 8 月發佈 USB 4.0 版本的時候,已經能夠達到幾個 Gb/s 的速度了。blog
△ 從 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 降速的問題:
若是您用的是 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 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 2.0鏈接。
確認一下您的 USB 集線器是否支持 USB 3.0,看一下它的接口是否是藍色的,若是接口只有 Type-C,能夠看一下說明書。
若是您仍有疑慮,能夠經過下面命令看一下您的 USB 設備和宿主機之間的速度。