在Android Pie
中,咱們android
15%(冷啓動)
。一些英雄案例甚至顯示
30%+
更快的啓動時間。其中一個最重要的方面是用戶能夠免費得到此功能,無需他們的支持或開發人員的努力!
該功能創建在先前的Profile Guided Optimization(PGO)工做的基礎上,該工做是在Android 7.0 Nougat中引入的。PGO容許Android Runtime經過構建應用程序最重要的熱門代碼的配置文件並將其優化工做集中在其上來幫助提升應用程序的性能。這能夠帶來巨大的改進,同時減小徹底編譯的應用程序的傳統內存和存儲影響。可是,它依賴於設備在空閒維護模式下根據這些代碼配置文件優化應用程序,這意味着它可能在用戶看到好處以前幾天 - 咱們的目標是改進。性能優化
這個想法依賴於兩個關鍵的觀察:架構
這意味着咱們可使用應用程序的初始部署來爲其他用戶引導性能。ART分析應用程序代碼的哪些部分值得在初始設備上進行優化,而後將數據上傳到Play Cloud,後者將構建核心聚合代碼配置文件(包含與全部設備相關的信息)。一旦有足夠的信息,代碼配置文件就會發布並與應用程序的APK一塊兒安裝。app
在設備上,代碼配置文件充當種子,在安裝時實現有效的配置文件引導優化。這些優化有助於改善冷啓動時間和穩定狀態性能,全部這些都不須要app開發人員編寫單行代碼。ide
其中一個主要目標是儘量快地從聚合和匿名數據中構建高質量,穩定的代碼配置文件(以最大限度地增長能夠受益的用戶數量),同時確保咱們有足夠的數據來準確優化應用程序的性能。採樣過多的數據會在安裝時佔用更多帶寬和時間。此外,咱們構建代碼配置文件的時間越長,得到好處的用戶就越少。採樣過少的數據,代碼配置文件將沒有足夠的信息來肯定適當優化的內容,以便產生影響。佈局
聚合的結果就是咱們所說的核心代碼配置文件,它只包含有關每一個設備隨機會話樣本中常常出現的代碼的匿名數據。咱們刪除異常值以確保咱們專一於對大多數用戶而言重要的代碼。性能
實驗代表,能夠在很短的時間內很是快速地計算出最經常使用的代碼路徑。這意味着咱們可以以足夠快的速度構建代碼配置文件,以便大多數用戶受益。學習
在Android 9.0 Pie
中,咱們引入了一種新類型的安裝工件:dex元數據文件。與APK相似,dex
元數據文件是常規存檔,其中包含有關如何優化APK
的數據 - 例如已在雲中構建的核心代碼配置文件。一個關鍵的區別是dex
元數據僅由平臺和應用商店管理,而且不會被開發人員直接看到。優化
還有對App Bundles / Google Play動態交付的內置支持:無需任何開發人員干預,全部應用程序的功能拆分都通過優化。ui
要了解這些代碼配置文件如何實現更好的性能,咱們須要查看它們的結構。代碼配置文件包含如下信息
使用這些信息,咱們使用了各類優化技術,其中如下三項提供了大部分優點:
好處是代碼被映射爲乾淨的內存(與JIT髒內存相比),這提升了總體內存效率。內存壓力下內核能夠釋放乾淨的內存,而髒內存則不能,減小內核殺死應用程序的可能性。
咱們在去年年末向Playstore上的全部應用程序推出了雲中的配置文件。
一個很是有趣的觀察是,平均而言,ART概述了大約20%的應用方法(若是咱們計算代碼的實際大小,則更少)。對於某些應用程序,配置文件僅佔代碼的2%,而對於某些應用程序,該數字則高達60%。
爲何這是一個重要的觀察?這意味着運行時沒有看到不少應用程序代碼,所以不會投入代碼的優化。雖然有許多有效的用例,其中代碼將不會被執行(例如錯誤處理或向後兼容性代碼),但這也多是因爲未使用的功能或沒必要要的代碼。偏斜分佈是一個強烈的信號,後者能夠在進一步優化中發揮重要做用(例如,經過刪除不須要的dex字節碼來下降APK大小)。
咱們對ART優化配置文件所展現的改進感到興奮,而且咱們未來會更多地發展這一律念。構建每一個應用程序的代碼配置文件爲更多應用程序改進提供了機會。開發人員可使用數據根據最終用戶的相關性和重要性來改進應用。使用「我的檔案」中收集的信息,能夠從新組織或修剪代碼,以提升效率。開發人員可使用App Bundle根據其使用狀況拆分其功能,並避免向用戶發送沒必要要的代碼。咱們已經看到應用啓動時間的巨大改進,並但願看到配置文件帶來的額外好處,使開發人員的生活更輕鬆,同時爲咱們的用戶提供更好的體驗。