只有少數的應用能獲得 “常駐主人手機後臺” 這一殊榮,音樂便是其中一類。
不同於其他手機記憶體裡的常客,音樂類應用更多的時候是在手機熄屏的狀態下工作著。享受音樂,最理想的狀態便是沉浸而不易中斷,開發者們也在為此不斷努力。
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 使用者服務。
滿足個性化 工作 “不打擾”
如果說對劉海屏適配 API 的整合只是 Android 9 時代為開發者提供的一項基本保證,那麼新版本中的通知欄優化則為開發者提供了更多提升使用者體驗的空間。
人們在使用音樂應用時,很多時候並不是經常在主介面進行操作,而是會在通知欄進行切歌等行為,這時候頻繁與使用者打交道的應用通知欄樣式成了“顏值擔當”。
在國內各類的第三方 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 開發者手冊“