用新技术 “派生” 的旋律把耳朵叫醒

只有少数的应用能得到 “常驻主人手机后台” 这一殊荣,音乐即是其中一类。android

不一样于其余手机内存里的常客,音乐类应用更多的时候是在手机熄屏的状态下工做着。享受音乐,最理想的状态即是沉浸而不易中断,开发者们也在为此不断努力。web

Shawn 是 QQ 音乐 Android 开发团队的一名开发工程师,他和同事们一直不断地在思考如何让用户得到更纯粹的音乐体验。

Android 9 发布后,Shawn 发现了更多的可能。编程

双轨并行 效率至上

Android 9 到来以前,最令 Shawn 头疼的一项工做即是为当时方兴未艾的各类刘海屏手机进行单独适配。工具

虽然音乐应用并非主要 “靠脸吃饭”,但用户打开应用留下的第一印象确实十分重要,若是界面不够协调有瑕疵,极可能会产生 “劝退” 效果。布局

QQ 音乐适配刘海屏屏先后界面对比
在国内不少手机还在使用 Android 8 系统时,市面上已经陆续出现了一些刘海屏产品,各个手机厂商也有本身的刘海屏判断逻辑,这对于开发者来讲很麻烦。为了让 QQ 音乐在这些手机上有良好的显示效果,Shawn 和同事们梳理出的逻辑是首先用代码判断手机是否为刘海屏,而后再根据其顶部显示空间对应用进行布局上的一些调整。

Android 9 收归了刘海屏的适配逻辑
令 Shawn 感到高兴的是,Android 9 中官方收归了该功能的适配逻辑,在手机厂商们按照 Google 官方的接口实现 Android 9 功能的前提下, 开发者可使用官方提供的方式来直接适配刘海屏。

为此,Shawn 还撰写了文档在腾讯音乐技术团队的公众号与你们分享,但愿更多的开发者可以规范地使用官方 API 提升工做效率。优化

目前,在国内还有不少手机没有升级到 Android 9 版本系统的状况下,QQ 音乐的 Android 团队在使用本身整合的 Android 8 各厂商刘海屏判断逻辑的同时,加上了 Android 9 官方的判断逻辑,这样就能保证灵活地为国内的 Android 用户服务。google

知足个性化 工做 “不打扰”

若是说对刘海屏适配 API 的整合只是 Android 9 时代为开发者提供的一项基本保证,那么新版本中的通知栏优化则为开发者提供了更多提高用户体验的空间。设计

人们在使用音乐应用时,不少时候并非常常在主界面进行操做,而是会在通知栏进行切歌等行为,这时候频繁与用户打交道的应用通知栏样式成了“颜值担当”。3d

QQ 音乐让用户能够根据喜爱选择 QQ 音乐默认通知栏样式 (左) 或自定义跟随系统样式 (右)
在国内各种的第三方 Android 系统中,不少应用自身的视觉设计语言可能会和总体系统有所不协调。Shawn 表示,QQ 音乐在很早的版本已经支持了通知栏样式切换,让用户根据本身的实际喜爱进行选择,目前默认使用的是 QQ 音乐自定义通知栏,这个在不一样手机上的表现效果是一致的,或者用户能够将其修改为原生系统通知栏样式,这样的通知栏在不一样手机上表现效果各异,总体上更加符合不一样第三方 Android 系统的设计语言,这也是 QQ 音乐在为用户提供各类个性化选择上作出的努力。

而通知栏的 “面子” 变了,不容易看见的通知逻辑其实也在新版本中悄然发生了改变。指针

QQ 音乐 Android 团队成员在开会研讨
Android 9 中,开发者能够对应用内通知进行更加精细的分级管理,灵活运用这特性,能够帮助应用变得更加 “识分寸”,将对用户的干扰降到最低。

QQ 音乐的 Android 开发团队很早就使用了 Android 8 的 Notification Channel 功能,并在适配 Android 9 期间计划逐步将应用内的通知根据重要性进行了不一样等级的区分,同时创建不一样的通知渠道,好比最重要的是听歌的通知,其次是相似用户私信的通知,再次是一些活动的相关推送等信息,这些不一样等级的内容都有独立的通知渠道,用户能够自定义地去设置是否播放声音和震动,而不是像过去同样简单粗暴地关掉全部通知,或者听任大量通知干扰本身。

作后台的小透明, 提供不间断的沉浸体验

通知频率不当会打扰到用户,但对于沉浸在音乐世界中的用户来讲,更严重的打扰是忽然中断——进程被系统杀死。

Android 版本的 QQ 音乐应用由两个进程组成,即播放进程和主进程,播放进程的占用内存要尽量的小来下降被系统杀死的几率,因此不少业务逻辑都是在主进程完成,可是在某些后台管理策略激进的第三方 Android 系统中,应用的全部进程可能会被同时杀死。

团队成员的工位
针对上面提到的这种问题,QQ 音乐的团队想出了更加稳定的后台策略:在双进程的前提下尽量减小播放进程对主进程的拉起频率,下降总体应用的系统内存资源占用,这样也可以减小被系统杀死的几率,绝大多数时候作个安静的 “小透明”,尽力提高用户体验,一切以用户价值为依归。

因此在适配 Android 9 的后台执行策略期间,QQ 音乐团队内部开了屡次技术会议,提前将双进程的优化提上日程,投入更多精力对目前的双进程机制进行优化,在知足 Android 9 后台执行策略的基础上进一步下降主进程驻后台的时间,从而实现更少的总体内存占用,极力减小音乐播放时戛然而止的糟糕状况发生。

优化打磨产品,离不开趁手的工具链。

QQ 音乐的 Android 同事认为 Android Studio3.2 版本的 Memory profiler 功能十分好用
Shawn 和同事们很早就开始使用 Android Studio 做为本身的 IDE,一些同事甚至会常常体验 canary 版本的 Android Sutdio 来为这个工具贡献本身的一份努力。最新发布的 Android Sutdio 3.2 版本提供的 Memory profiler 内存工具也让他们赞不绝口,相比以前,最新的这个工具能够很直观地对 JNI 层内存分配进行实时监控,看到底层内存申请和释放的过程,对于内存优化功能帮助极大。

除了使用 Android Studio 以外,QQ 音乐新增的功能特性基本都使用的是 Kotlin 语言,Shawn 认为,从零开始开发一个模块的时候,使用 Kotlin 能够节省 25% 左右的开发时间,同时还能大大的减小空指针等异常。

工程师们用本身的智慧,把音乐应用调教成一位外冷内热的演奏家,它彬彬有礼地工做着,不动声色地奏响一曲又一曲或波澜壮阔或低吟浅唱的美妙音乐。

一行行代码随着编程的旋律在咏唱,正等待着有心的耳朵去聆听。

点击这里下载 “Android 9 Pie 开发者手册

Android 9 Pie 官方适配指南,确保应用完美兼容!

相关文章
相关标签/搜索