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

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

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

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 用户服务。

满足个性化 工作 “不打扰”

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

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

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 开发者手册

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏13blog.site

Spring+SpringMVC+MyBatis+easyUI整合优化篇(三)代码测试

前言 看到标题你可能会问为什么这一篇会谈到代码测试,不是说代码优化么?前两篇主要是讲了程序的输出及Log4j的使用,Log能够帮助我们进行bug的定位,优化开发...

298100
来自专栏知晓程序

微信小程序 6 大新能力全面解读!附个人开发者注册教程

微信小程序在 3 月 27 日晚 10 点突然爆出大新闻。微信为小程序开放了 6 大新能力,在知晓程序的这篇文章中,你将看到小程序 6 大新能力的最靠谱解读。

14630
来自专栏pangguoming

国外物联网平台(1):亚马逊AWS IoT

设备影子服务使用MQTT话题,便于应用和设备之间的通信,下面是相关的MQTT QoS 1话题:

80220
来自专栏陈树义

如何通过组件化提高开发效率?

在软件开发过程中,大到业务模块的划分,小到技术组件的开发,都属于组件化的思考范畴内。很多时候我们到网上搜索「组件化」关键词,都只会看到关于前端组件化的资料,而对...

33840
来自专栏WeTest质量开放平台团队的专栏

告别测试机!云真机的进阶之路

WeTest云真机自9月份全新改版上线以来,受到了广大开发者和测试人员的好评。与传统测试机相比,WeTest云真机不仅有更流畅的操作体验,更方便的测试选择,同时...

63820
来自专栏无原型不设计

UX术语详解:任务流,用户流,流程图以及其它全新术语

以下内容由Mockplus(摹客)团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具。

1.9K110
来自专栏云计算D1net

如何架构企业内部的存储云

存储即服务在近年来得到长足发展,越来越多的用户开始接受这种服务交付模式。今天的公有云服务商,如Amazon Web Services和Microsoft Azu...

51440
来自专栏瓜大三哥

VS2详细设计(一)

输入端接入计算机的DVI数据源,输出端可以根据用户设定的不同分辨率和帧频输出相应的视频(本设计可以对1920x1080@60Hz,1280x720@60Hz,8...

13550
来自专栏互联网数据官iCDO

【经典文章】运营优化的秘密武器:重新认识热图的力量!

主编注:这篇文章获得业内很高的关注。是宋星老师的另一篇讲述如何优化网站页面尤其是着陆页的经典文章。 引言   之前发布的文章:《优化高跳出率着陆...

34140
来自专栏企鹅号快讯

如何用Python在豆瓣中获取自己喜欢的TOP N电影信息

一、什么是 Python Python (蟒蛇)是一门简单易学、 优雅健壮、 功能强大、 面向对象的解释型脚本语言.具有 20+ 年发展历史, 成熟稳定. 具有...

23350

扫码关注云+社区

领取腾讯云代金券