只有少数的应用能获得 “常驻主人手机后台” 这一殊荣,音乐便是其中一类。
不同于其他手机内存里的常客,音乐类应用更多的时候是在手机熄屏的状态下工作着。享受音乐,最理想的状态便是沉浸而不易中断,开发者们也在为此不断努力。
Android 9 发布后,Shawn 发现了更多的可能。
双轨并行 效率至上
Android 9 到来之前,最令 Shawn 头疼的一项工作便是为当时方兴未艾的各种刘海屏手机进行单独适配。
虽然音乐应用并不是主要 “靠脸吃饭”,但用户打开应用留下的第一印象确实十分重要,如果界面不够协调有瑕疵,很可能会产生 “劝退” 效果。
为此,Shawn 还撰写了文档在腾讯音乐技术团队的公众号与大家分享,希望更多的开发者能够规范地使用官方 API 提高工作效率。
目前,在国内还有很多手机没有升级到 Android 9 版本系统的情况下,QQ 音乐的 Android 团队在使用自己整合的 Android 8 各厂商刘海屏判断逻辑的同时,加上了 Android 9 官方的判断逻辑,这样就能保证灵活地为国内的 Android 用户服务。
满足个性化 工作 “不打扰”
如果说对刘海屏适配 API 的整合只是 Android 9 时代为开发者提供的一项基本保证,那么新版本中的通知栏优化则为开发者提供了更多提升用户体验的空间。
人们在使用音乐应用时,很多时候并不是经常在主界面进行操作,而是会在通知栏进行切歌等行为,这时候频繁与用户打交道的应用通知栏样式成了“颜值担当”。
而通知栏的 “面子” 变了,不容易看见的通知逻辑其实也在新版本中悄然发生了改变。
QQ 音乐的 Android 开发团队很早就使用了 Android 8 的 Notification Channel 功能,并在适配 Android 9 期间计划逐步将应用内的通知根据重要性进行了不同等级的区分,同时建立不同的通知渠道,比如最重要的是听歌的通知,其次是类似用户私信的通知,再次是一些活动的相关推送等信息,这些不同等级的内容都有独立的通知渠道,用户可以自定义地去设置是否播放声音和震动,而不是像过去一样简单粗暴地关掉所有通知,或者放任大量通知干扰自己。
做后台的小透明, 提供不间断的沉浸体验
通知频率不当会打扰到用户,但对于沉浸在音乐世界中的用户来说,更严重的打扰是突然中断——进程被系统杀死。
Android 版本的 QQ 音乐应用由两个进程组成,即播放进程和主进程,播放进程的占用内存要尽可能的小来降低被系统杀死的概率,所以很多业务逻辑都是在主进程完成,但是在某些后台管理策略激进的第三方 Android 系统中,应用的所有进程可能会被同时杀死。
所以在适配 Android 9 的后台执行策略期间,QQ 音乐团队内部开了多次技术会议,提早将双进程的优化提上日程,投入更多精力对目前的双进程机制进行优化,在满足 Android 9 后台执行策略的基础上进一步降低主进程驻后台的时间,从而实现更少的整体内存占用,极力减少音乐播放时戛然而止的糟糕情况发生。
优化打磨产品,离不开趁手的工具链。
除了使用 Android Studio 之外,QQ 音乐新增的功能特性基本都使用的是 Kotlin 语言,Shawn 认为,从零开始开发一个模块的时候,使用 Kotlin 可以节省 25% 左右的开发时间,同时还能大大的减少空指针等异常。
工程师们用自己的智慧,把音乐应用调教成一位外冷内热的演奏家,它彬彬有礼地工作着,不动声色地奏响一曲又一曲或波澜壮阔或低吟浅唱的美妙音乐。
一行行代码随着编程的旋律在咏唱,正等待着有心的耳朵去聆听。
点击这里下载 “Android 9 Pie 开发者手册“