分享好友 最新动态首页 最新动态分类 切换频道
面试官:说下简历中提到的优化/整理下早期自己做的优化
2024-12-27 12:35

作者:张力尹

面试官:说下简历中提到的优化/整理下早期自己做的优化

先来点废话
听说最近 Android 岗位变多了,你去面试了么
面试官:你简历中提到了卡顿优化,做了哪些优化呢,展开说说。
:哦,脑子飞速闪过网上的文章,然后说内存泄漏、内存抖动、启动优化、布局优化、图片优化、网络优化…
面试官:细节呢,详细些。
:哦,啊,哈哈哈…

文章初衷
网上优化文章很多,各种主题都有,每次看那些大牛文章都觉得好有道理,啊我会了,可实际应用到项目的时候又不知道从哪里下手…
咋的,说的是不是你?反正这真的就是我。所以想着把自己做的一些小优化分享出来,主题尽量明确,看后更易上手,让世界更美好「为以后的面试润色」…

先不引入 Matrix 等第三方库,。

子曰:“工欲善其事,必先利其器。居是邦也,事其大夫之贤者,友其士之仁者。”

如果你刚刚开始优化,那就别上来就扯 systrace 和 traceview「已被废弃」 了,先看看 Android Profiler 吧。看看它能做什么

  • CPU 性能分析器有助于查出运行时性能问题。
  • 内存分析器有助于跟踪内存分配情况。
  • 网络性能分析器可监控网络流量使用情况。
  • 能耗性能分析器可跟踪能耗情况,这有助于分析电池电量消耗过快的问题。

ps:如果熟练此段可略过。另外只涉及到 java 层,未涉及到 native 层泄漏。
几年前,提到内存泄漏,很多人都会想到 LeakCanary,上手简单,而且去面试的时候很多时候还会问 LeakCanary 实现原理 / 为什么不能在线上应用等等…
现在时代换了,官方直系血亲来了。
本文使用的Studio版本:Android Studio Giraffe | 2022.3.1 Beta 1

先说定位步骤

  • 创造泄漏环境
    App 多点几个页面,复杂页面可执行多次进入/退出的操作,再回到App 首页
  • 打开 Profiler 界面
  • 点击如下绿框选中icon
  • 呈现如下图,内存问题排查需要进入到 memory 模块
  • 捕获堆转储「即选择绿框内容」,并点击record,会自动开始分析,等待即可
  • 自动停止后,会出现如下展示
  • 选择绿框选项,会筛选出 activity/fragment 层级的内存泄漏

适用场景:已知某个行为会触发卡顿,eg:点击到某个tab,进入某个页面

先说定位步骤

  • 进入Profiler,点击进入 CPU 模块
  • 选中第四个「Java/Kotlin Method Sample」,点击record
  • 自己点击stop后,等待生成文件,有需要可以右键保存为 trace 文件;双击 main 模块,点击具体分析 UI 线程做了啥大事。

看到上图其实已经大概意识到事情没这么简单了…为啥?看颜色

  • 对系统 API 的调用显示为橙色
  • 对应用自有方法的调用显示为绿色
  • 对第三方 API(包括 Java 语言 API)的调用显示为蓝色

tip:调节下图绿框中的两个箭头位置也可以放大/缩小

接下来就是重点看绿色部分,看看自有方法为啥导致绿色长度这么明显。

解决的问题

下面列出来的,都是我通过上面的方式,解决的部分问题。
声明:以下数据均比生产环境的值要小…

1.PackageInfo 相关的问题

通过 CPU Profiler 可以看到下图

 
2.Websocket 使用问题

如下图,发现 UI 线程里面有大量 GSON 解析的操作,再跟踪,发现 App 中对于 WebSocket 的数据接收和处理,基本上是 UI 线程,造成掉帧 or 卡顿 or ANR。其实也惭愧,这个问题竟然之前没注意…

对于我们的 App 来讲,更致命,因为场景主要是歌房,消息基本都是通过 ws 来处理的,里面有各种UI的频繁更新、各种动效、各种动画、歌曲演唱…

所以凭借这个优化了整个App 对于 ws 的使用,改完后经住了测试组的压测、发热/卡顿等都好了很多。

3.EmojiManager.renderEmoji 方法
4.图文混排

项目中应该都有这种形式,text+icon 这种,如果在 RecyclerView 中使用,那卡顿就比较明显了

5.骨架屏耗时

这是之前的业务需求,后来一跑太耗时,直接下掉了…

6.获取通知是否可用

业务中很多关于是否获取通知权限的判断,这种case 应该存为全局常量,必要情况再去重新获取值。

Profiler 部分小结

这里说的只是初步使用,还有更细节且更精准定位某个方法的方式,需要去继续探索了。不过虽是初步使用,但是在我公司的项目里解决了不少问题,大家也开始吧 ~ 在一些场景下用 Profiler 去定位卡顿是不方便的,所以有很多优秀的框架 Matrix、Booster、KOOM 等。

这个主题很大,开始的话,时间也比较长,前期储备较多知识点,具体应用还要结合自己的项目,我在这里只是提一下主题。

为了帮助到大家更好的全面清晰的掌握好性能优化,准备了相关的核心笔记(还该底层逻辑

性能优化核心笔记

《Android 性能监控框架》

《Android Framework学习手册》

  1. 开机Init 进程
  2. 开机启动 Zygote 进程
  3. 开机启动 SystemServer 进程
  4. Binder 驱动
  5. AMS 的启动过程
  6. PMS 的启动过程
  7. Launcher 的启动过程
  8. Android 四大组件
  9. Android 系统服务 - Input 事件的分发过程
  10. Android 底层渲染 - 屏幕刷新机制源码分析
  11. Android 源码分析实战
最新文章
爬虫大全:从零开始学习爬虫的基础知识,小白也能学
爬虫的实现原理其实很简单,就是模拟浏览器发送请求、获取响应、解析HTML代码、保存数据的过程。具体来说,可以分为以下几个步骤:我们在浏览器里输入网址访问网页时,其实就是在向服务器发送一条请求。在爬虫中&#
谷歌账号购买 谷歌邮箱批发 24小时自动发货
在当今数字化时代,谷歌账户(Google Account)已成为用户进入互联网世界的重要工具。无论是使用Gmail进行日常通信,还是通过YouTube获取丰富的娱乐内容,谷歌账户的影响力无处不在。对于希望在海外市场拓展业务或个人用户而言,购买谷歌账
网页转二维码:简单实用的在线工具
在如今的信息时代,二维码已经成为人们生活中不可或缺的一部分。二维码可以承载大量的信息,并且可以通过扫描进行快速的读取。在网页设计和推广中,将网页转为二维码是一项非常重要的工作。本文将介绍一种简单实用的在线工具,帮助用户将网
水排的汉语大词典
水排的汉语大词典是:古代一种利用水力推动革囊鼓风的冶铁装置。《三国志·魏志·韩暨传》:“旧时冶,作马排,每一熟石用马百匹;更作人排,又费功力;暨乃因长流为水排,计其利益,三倍于前。”明徐光启《农政全书》卷十八:“水排,韦囊
PyTorch深度学习模型训练加速指南2021
点击上方“AI公园”,关注公众号,选择加“星标“或“置顶” 作者:LORENZ KUHN 编译:ronghuaiyang导读简要介绍在PyTorch中加速深度学习模型训练的一些最小改动、影响最大的方法。我既喜欢效率又喜欢ML,所
网站怎么优化电池推荐
优化您的网站以推荐电池产品涉及几个方面,包括SEO(搜索引擎优化)、用户体验和内容策略。以下是一些关键步骤: 1. 关键词和SEO优化- 关键词研究: 使用工具如Google Keyword Planner、Ahrefs或SEMrush来识别与电池相关的高搜索量关键词,
虾皮店铺转让多少钱?如何转让?
现在很多卖家选择在跨境平台虾皮上注册开店,但是由于平台上的店铺是非常激烈的,很多卖家无法继续将店铺经营下去,就会想要将店铺进行转让,那么虾皮店铺转让是多少钱了?shopee店铺转让价格并不是一定的,主要还是看店铺的运营情况。一般
超高清美女写真,这款AI工具教你一键生成心仪形象!
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个数字时代,许多人希望通过高科技手段来实现艺术创作,而AI的崛起让这一切变得轻而易举
科技智能重塑外汇体验,最新动态与未来展望
摘要:外汇市场最新动态显示,科技引领未来发展趋势,智能产品正在重塑外汇交易体验。随着科技的不断进步,外汇交易逐渐实现智能化,提供更加便捷、高效的交易方式。智能产品的应用,使得外汇交易更加智能化、个性化,满足不同交易者的需求
ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法,先分组,然后在组内排名,分组计算,主表与附表一对多取唯一等
今天在使用多字段去重时,由于某些字段有多种可能性,只需根据部分字段进行去重,在网上看到了rownumber() over(partition by col1 order by col2)去重的方法,很不错,在此记录分享下:  row_number() OVER ( PARTITION BY COL1 ORDER B
相关文章
推荐文章
发表评论
0评