只有少數的應用能得到 「常駐主人手機後臺」 這一殊榮,音樂即是其中一類。android
不一樣於其餘手機內存裏的常客,音樂類應用更多的時候是在手機熄屏的狀態下工做着。享受音樂,最理想的狀態即是沉浸而不易中斷,開發者們也在爲此不斷努力。web
Shawn 是 QQ 音樂 Android 開發團隊的一名開發工程師,他和同事們一直不斷地在思考如何讓用戶得到更純粹的音樂體驗。Android 9 發佈後,Shawn 發現了更多的可能。編程
Android 9 到來以前,最令 Shawn 頭疼的一項工做即是爲當時方興未艾的各類劉海屏手機進行單獨適配。工具
雖然音樂應用並非主要 「靠臉吃飯」,但用戶打開應用留下的第一印象確實十分重要,若是界面不夠協調有瑕疵,極可能會產生 「勸退」 效果。佈局
在國內不少手機還在使用 Android 8 系統時,市面上已經陸續出現了一些劉海屏產品,各個手機廠商也有本身的劉海屏判斷邏輯,這對於開發者來講很麻煩。爲了讓 QQ 音樂在這些手機上有良好的顯示效果,Shawn 和同事們梳理出的邏輯是首先用代碼判斷手機是否爲劉海屏,而後再根據其頂部顯示空間對應用進行佈局上的一些調整。 令 Shawn 感到高興的是,Android 9 中官方收歸了該功能的適配邏輯,在手機廠商們按照 Google 官方的接口實現 Android 9 功能的前提下, 開發者可使用官方提供的方式來直接適配劉海屏。爲此,Shawn 還撰寫了文檔在騰訊音樂技術團隊的公衆號與你們分享,但願更多的開發者可以規範地使用官方 API 提升工做效率。優化
目前,在國內還有不少手機沒有升級到 Android 9 版本系統的狀況下,QQ 音樂的 Android 團隊在使用本身整合的 Android 8 各廠商劉海屏判斷邏輯的同時,加上了 Android 9 官方的判斷邏輯,這樣就能保證靈活地爲國內的 Android 用戶服務。google
若是說對劉海屏適配 API 的整合只是 Android 9 時代爲開發者提供的一項基本保證,那麼新版本中的通知欄優化則爲開發者提供了更多提高用戶體驗的空間。設計
人們在使用音樂應用時,不少時候並非常常在主界面進行操做,而是會在通知欄進行切歌等行爲,這時候頻繁與用戶打交道的應用通知欄樣式成了「顏值擔當」。3d
在國內各種的第三方 Android 系統中,不少應用自身的視覺設計語言可能會和總體系統有所不協調。Shawn 表示,QQ 音樂在很早的版本已經支持了通知欄樣式切換,讓用戶根據本身的實際喜愛進行選擇,目前默認使用的是 QQ 音樂自定義通知欄,這個在不一樣手機上的表現效果是一致的,或者用戶能夠將其修改爲原生系統通知欄樣式,這樣的通知欄在不一樣手機上表現效果各異,總體上更加符合不一樣第三方 Android 系統的設計語言,這也是 QQ 音樂在爲用戶提供各類個性化選擇上作出的努力。而通知欄的 「面子」 變了,不容易看見的通知邏輯其實也在新版本中悄然發生了改變。指針
Android 9 中,開發者能夠對應用內通知進行更加精細的分級管理,靈活運用這特性,能夠幫助應用變得更加 「識分寸」,將對用戶的干擾降到最低。QQ 音樂的 Android 開發團隊很早就使用了 Android 8 的 Notification Channel 功能,並在適配 Android 9 期間計劃逐步將應用內的通知根據重要性進行了不一樣等級的區分,同時創建不一樣的通知渠道,好比最重要的是聽歌的通知,其次是相似用戶私信的通知,再次是一些活動的相關推送等信息,這些不一樣等級的內容都有獨立的通知渠道,用戶能夠自定義地去設置是否播放聲音和震動,而不是像過去同樣簡單粗暴地關掉全部通知,或者聽任大量通知干擾本身。
通知頻率不當會打擾到用戶,但對於沉浸在音樂世界中的用戶來講,更嚴重的打擾是忽然中斷——進程被系統殺死。
Android 版本的 QQ 音樂應用由兩個進程組成,即播放進程和主進程,播放進程的佔用內存要儘量的小來下降被系統殺死的機率,因此不少業務邏輯都是在主進程完成,可是在某些後臺管理策略激進的第三方 Android 系統中,應用的全部進程可能會被同時殺死。
針對上面提到的這種問題,QQ 音樂的團隊想出了更加穩定的後臺策略:在雙進程的前提下儘量減小播放進程對主進程的拉起頻率,下降總體應用的系統內存資源佔用,這樣也可以減小被系統殺死的機率,絕大多數時候作個安靜的 「小透明」,盡力提高用戶體驗,一切以用戶價值爲依歸。因此在適配 Android 9 的後臺執行策略期間,QQ 音樂團隊內部開了屢次技術會議,提前將雙進程的優化提上日程,投入更多精力對目前的雙進程機制進行優化,在知足 Android 9 後臺執行策略的基礎上進一步下降主進程駐後臺的時間,從而實現更少的總體內存佔用,極力減小音樂播放時戛然而止的糟糕狀況發生。
優化打磨產品,離不開趁手的工具鏈。
Shawn 和同事們很早就開始使用 Android Studio 做爲本身的 IDE,一些同事甚至會常常體驗 canary 版本的 Android Sutdio 來爲這個工具貢獻本身的一份努力。最新發布的 Android Sutdio 3.2 版本提供的 Memory profiler 內存工具也讓他們讚不絕口,相比以前,最新的這個工具能夠很直觀地對 JNI 層內存分配進行實時監控,看到底層內存申請和釋放的過程,對於內存優化功能幫助極大。除了使用 Android Studio 以外,QQ 音樂新增的功能特性基本都使用的是 Kotlin 語言,Shawn 認爲,從零開始開發一個模塊的時候,使用 Kotlin 能夠節省 25% 左右的開發時間,同時還能大大的減小空指針等異常。
工程師們用本身的智慧,把音樂應用調教成一位外冷內熱的演奏家,它彬彬有禮地工做着,不動聲色地奏響一曲又一曲或波瀾壯闊或低吟淺唱的美妙音樂。
一行行代碼隨着編程的旋律在詠唱,正等待着有心的耳朵去聆聽。
點擊這裏下載 「Android 9 Pie 開發者手冊「