Android 居然还能这样抓捕和利用主线程碎片时间

1 月 29 日
阅读 5 分钟
1.2k
在 Android 应用开发过程中,我们会将一些耗时任务放在子线程进行处理,从而避免出现主线程卡顿的情况。但是不可避免的,依然会出现有些任务必须要在主线程中执行,如果主线程需要执行的任务过多,会出现卡顿的情况,那么接下来我们就应该思考如何解决这个问题。
封面图

云音乐Android Cronet接入实践

2023-10-19
阅读 8 分钟
757
网易云音乐产品线终端类型广泛,除了移动端(IOS/安卓)之外,还有PC、MAC、Iot多终端等等。移动端由于上线时间早,用户基数大,沉淀了一些端侧相对比较稳定的网络策略和网络基础能力。然而由于各端在基础能力上存在不对齐的现状:移动端双端在这些能力细节上有差异,同时PC、MAC这方面能力相较于移动端又略微滞后。为了...
封面图

Android 增量构建的科技与狠活

2023-09-20
阅读 11 分钟
879
对于 Android 应用,尤其是大型应用而言,构建耗时是令人头疼的一件事。动辄几分钟甚至十几分钟的时间更是令大部分开发人员苦不堪言。而在实际开发过程中面对最多的就是本地的增量编译,虽然官方对增量编译有做处理,但在具体项目,尤其是中大型项目中,效果其实都不太理想。
封面图

云音乐 Android so 体积治理实践

2023-05-22
阅读 6 分钟
913
软件应用除了功能外,还有许多非功能质量属性需要我们关注,常见有性能、安全性、可用性、可扩展性等。除此之外,软件的体积也是我们应该关注的重要质量属性。体积对启动速度、下载安装时长、安装成功率、磁盘空间占用、OOM 异常等都有深刻影响。
封面图

Android本地搜索优化

2023-05-11
阅读 8 分钟
1.1k
在本文中,我们将通过 Android 本地搜索业务介绍如何使用 JavaScriptCore(以下简称 JSC)和Java Native Interface(以下简称 JNI)相关技术来实现搜索效率提升。
封面图

不一样的 Android 堆栈抓取方案

2023-03-21
阅读 12 分钟
1.5k
曾几何时,我们只需要简简单单的一行 Thread.currentThread().getStackTrace() 代码就可以轻轻松松的获取到当前线程的堆栈信息,从而分析各种问题。随着需求的不断迭代,APP 遇到的问题越来越多,卡顿,ANR,异常等等问题接踵而来,那么简简单单某个时刻的堆栈信息已经不能满足我们的需求了,我们的目光逐渐转移到了每个...
封面图

网易云音乐开源全链路埋点方案-曙光埋点(dawn)

2023-03-14
阅读 3 分钟
3.9k
网易云音乐开源了曙光埋点 dawn,一个跨多端的全链路埋点解决方案,旨在构造一个完美的数据理想国。曙光埋点创造性的提出了埋点虚拟树(VTree),并在此基础上实现了诸多能力,解决大前端侧埋点困难、精度差、不稳定、质量不高的问题,并且设计一套完整的端侧全链路追踪能力,完美助力大数据用户画像、实时归因/离线归因...
封面图

dex 优化编年史

2023-02-17
阅读 16 分钟
1.7k
在热修复和插件化场景中会涉及动态加载 dex,要使它们中代码的执行速度与安装的 APK 相当,需要对它们进行正确的优化。根据以往的经验,在热修复场景中,错误的方式导致 dex 没有得到优化时,修复后 App 的启动速度比修复前慢 50%。本文将在下面的部分介绍在 Android 5.0 以来的各系统版本中对动态加载的 dex 进行优化的...
封面图

云音乐 Android 内存监控探索篇

2023-02-06
阅读 5 分钟
1.4k
随着云音乐不断的对线上崩溃治理,目前崩溃率已经达到了行业内较低水平。但线上还存在很多 OOM 的崩溃,这种崩溃大多是因为编码不规范导致的内存异常问题(比如内存泄露、大对象、大图等不合理的内存使用)。内存问题难发现、难复现和难排查。这就需要我们通过一些监控手段和一些工具去协助开发人员更好的排查此类问题。...
封面图

Android APP 出海实践

2023-02-02
阅读 9 分钟
1.3k
当前国内各个公司 APP 出海创收已经是互联网行业的常见操作。笔者最近约 2 年的时间里,都在进行云音乐旗下首个出海应用 Android 客户端的开发。本文对海外 APP 一些开发经验做一些分享。
封面图

Android 调试实战与原理详解

2023-01-31
阅读 9 分钟
1.6k
调试功能做为开发的必备神技,熟练掌握后能极大的提高开发效率,再也不必为频繁运行代码而苦恼了。文章同时还会详细介绍调试的原理以及一些调试过程中的常见问题,想知道为什么方法断点那么慢?
封面图

读懂 gradle dependencies

2022-12-13
阅读 12 分钟
1.5k
不过在使用 dependencies 时有一些细节之前一直没有搞清楚,遂研究了一下部分细节。本文整体参考 gradle 官方文档,大家感兴趣也可以自己深入研究下。
封面图

扒一扒 Jetpack Compose 实现原理

2022-11-21
阅读 25 分钟
2.8k
Compose 是 Google 推出的现代化 UI 开发工具包,基于声明式 UI 开发风格,加上 @Composable 函数帮助开发者有效的实现关注点分离,另外 Compose 内部最大程度优化了重组范围,可以帮助我们高效的刷新UI,考虑到 Compose 整体架构设计过于复杂,这篇文章主要带大家了解 Compose Runtime 层核心的实现逻辑。
封面图

如何魔改Retrofit

2022-11-15
阅读 14 分钟
1.6k
Retrofit 是 Square 公司开源的网络框架,在 Android 日常开发中被广泛使用,开发者们对于 Retrofit 的原理、源码都已经有相当深入的分析。
封面图

基于 React Native 的动态列表方案探索

2022-09-13
阅读 7 分钟
2.1k
时至2022,精细化运营已经成为了各大App厂商的强需求,阿里的 DinamicX、Tangram 大家应该都很熟悉了,很多App厂商也自研了一些类似框架,基于DSL的动态化方案虽然有性能上的一些优势,但是毕竟不是图灵完备,一些需要逻辑动态下发的需求实现成本偏高,或由于DSL本身限制无法实现,针对这个问题我们使用RN进行了一下探索...
封面图

RTC 脚手架的设计和实现

2022-09-08
阅读 7 分钟
1.6k
RTC 即 Real-Time Communication 的简称是一种给行业提供高并发、低延时、高清流畅、安全可靠的全场景、全互动、全实时的音视频服务的终端服务。上面是比较官方的解释,通俗的来讲就是一种能够实现一对一、多对多音视频通话等众多功能的服务。目前提供该项服务的服务商有很多例如:声网、云信、火山引擎、腾讯云等。
封面图

心遇 Android 启动优化实践:将启动时间降低 50%

2022-09-02
阅读 12 分钟
2k
作为 APP 体验的重要环节,启动速度是各个技术团队关注的重点。几百毫秒启动耗时的增减都会影响用户的体验,并直接反应在留存上。心遇 APP 作为一款用于满足中青年市场用户社交诉求的应用,对各个性能层次的手机型号,都要求有良好的启动体验。因此,随着用户量快速增长,启动优化作为一个性能专项被提上了日程。
封面图

systrace 统计方法耗时

2022-06-07
阅读 6 分钟
2.6k
Android是单线程模型,用户的按键事件、屏幕触摸及 UI 绘制都在 UI 线程中处理。单线程意味着串行执行,如果某一个操作耗时了就会导致后续的操作都得等待,这个时候用户的第一感知就是卡了。所以在排查卡顿的时候有一个最简单的办法就是找出耗时长的方法。
封面图

App 出海 —— Google 结算系统面面观

2022-04-28
阅读 6 分钟
3.7k
近年来中国移动应用出海势头良好。对于涉及到交易业务的出海应用来说,Google 应用内支付是必不可少的支付渠道。不同于国内相对完善的移动支付体系,即使官方文档中对如何接入 Google 应用内支付做了基本阐述,但是在接入的过程中,还是会遇到很多问题。本文将介绍交易的重点流程和核心技术要点,以及需要注意的问题。
封面图

Android 隐私合规静态检查实现(二)

2021-12-27
阅读 4 分钟
4.8k
本文作者:烧麦前言笔者之前在云音乐大前端公众号分享了 Android 隐私合规静态检查的一部分实现。Android隐私合规静态检查上一篇文章通过反编译 APP 的方式,扫描了 APP 内对隐私方法调用的检查。但存在一些问题:无法检查到 so 文件里是否可能存在隐私方法的调用。当我们全量扫描出某个地方存在隐私方法调用的时候,我...
封面图

Android 隐私合规静态检查

2021-11-01
阅读 5 分钟
4.7k
目前,国内对应用程序安全隐私问题监管变的越来越严格。各个应用市场对APP上架也有比较严格的检查。云音乐今年也在Google Play上上架了一些海外的社交类业务。Google Play在审核应用的时候,也有相应的政策。当我们每次遇到问题的时候,需要根据检查方的信息对一些代码逻辑进行排查。
封面图

AGP 升级之旅

2021-09-01
阅读 16 分钟
7.1k
近期,由于引入的新工具依赖 Android Gradle Plugin(后面都简写为 AGP)4.1 或以上版本,而项目当前使用的 AGP 版本为 3.5.0,需进行升级。考虑到一些第三方库尚未对最新的 AGP 4.2 版本提供支持,决定将 AGP 升级到 4.1 中的最高版本 4.1.3,遂开启了本次 AGP 升级之旅。
封面图

Android 开发,如何写出符合规范的异常处理代码?

2021-08-13
阅读 5 分钟
4.7k
在 Java 中,异常明确的分为两种:Checked Exception 和 Unchecked Exception。下图中的红色部分表示 Unchecked Exception 异常,蓝色的表示 Checked Exception。结构图如下:
封面图

如何把应用搬上车

2021-07-30
阅读 8 分钟
4k
当前造车新势力越来越火,汽车智能化成为风口,很多手机应用希望拓展车机场景,云音乐及旗下 Look 直播也在车机端场景进行了一些探索,下面分享过程中的一些总结和心得体会
封面图

Android agp 对 R 文件内联支持

2021-07-20
阅读 7 分钟
5.8k
最近团队升级静态代码检测能力,依赖的相关编译检测能力需要用到较新的agp,而且目前云音乐agp版本用的是 3.5.0,对比现在 4.2.0 有较大差距,所以我们集中对 agp 进行了一次升级。在升级前通过官方文档,发现在 agp3.6.0 和 4.1.0 版本分别对 R 文件的处理方式进行了相应的升级,具体升级如下。
封面图

Poplayer 云音乐优化实践

2020-12-30
阅读 6 分钟
8.3k
你是否还在为各种特殊场景特殊逻辑而烦恼,是否还在为各种一次性业务而添加一堆代码,是否还在为各种奇奇怪怪的彩蛋而满心疲惫? 在云音乐不断迭代的过程中,我们不止一次的遇到产品说要在某一个地方加个彩蛋,有的是在触及特殊操作时,有的是在播放特定歌曲时,甚至有的是在特定时间点播放特定歌曲到特定播放进度时。

云音乐 Android 视频「无缝」播放实现总结

2020-12-09
阅读 5 分钟
6.7k
在网易云音乐 8.0 改版中,接到一个播放中的视频可以点击「小窗」按钮收起到 mini 播放条中继续播放的需求,刚接到这个需求时内心是崩溃的,要知道网易云音乐的 mini 播放条是一个可能会出现在 App 中的任何 Activity 上的 View,在不同 Activity 之间跳转时,如何能保证视频可以从一个 Activity “无缝”转移到另一个 Act...

聊聊 RN 中 Android 提供 View 的那些坑

2020-12-02
阅读 7 分钟
5.3k
最近笔者研究 Android 中使用自定义 View 提供原生组件给 React Native(下面统一写成 RN ) 端的时候,遇到一些实际问题,在这里从 RN 的一些工作机制入手,分享一下问题的原因和解决方案。