2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

安卓端贝壳找房 APP 首页滑动卡顿问题的解决

  • 2019-09-23
  • 本文字数:1729 字

    阅读完需:约 6 分钟

安卓端贝壳找房APP首页滑动卡顿问题的解决

1. 背景

在研发初期,打开贝壳找房 app 后上下滑动界面, 明显感觉到顿挫感, 即使在安卓高端机(内存 6G)也如此, 说明不是硬件配置低的锅。

2. 解决思路

造成 UI 卡顿分为 3 方面原因;


CPU 太忙, 即手机运行了很多 app 和服务, 占用了大量的 CPU; CPU 是负责数据运算的, 通过 SurfaceFlinger 告诉 GPU 要显示什么。


GPU 太忙, GPU 接收 CPU 传来的指令, 如果指令太多可能会导致丢帧/卡顿, 渲染一帧图像要在 16ms 以内才能保证 UI 的流畅性;


内存不足, 手机运行太多的 app 和服务,没有充裕内存空间分配到当前 app,但现在市场安卓手机内存主流水平是 3G/4G/6G/8G,一般可以忽略该因素; 但当前 app 占用的内存空间太大可能导致卡顿。 通常是 app 出现内存泄漏或者占用内存太高(例如缓存了图片、文件或其它数据结构)。


PS: 分析 root cause 占用八成时间, 解决问题占用两成时间;


从哪个点入手分析问题???


我的建议是从简单到复杂, 即先分析 GPU 性能(专业叫法是过度绘制,即一个像素被绘制了多次)。


打开 系统设置 — 开发者选择 — 调试 GPU 过度绘制 — 显示过度绘制区域 和 系统设置 — 开发者选择 — GPU 呈现模式分析 — 在屏幕上显示为条形图, 然后再看看要调试的界面;



贝壳找房 App 首页



过度渲染示意图


通过安卓自带功能可以看出首页过度绘制问题很严重, 底部柱状图显示每帧图像渲染时间都超过 16ms, 意味着丢帧/卡段现象比较严重。


那么怎么解决过度绘制问题呢?

3. 问题原理

从叶节点 View/ViewGroup 向上找出所有的父/祖父/曾祖父的 ViewGroup, 一直到布局根节点,删除不必要的背景(设置背景就要多渲染一次);合理调整 UI 布局,尽量减少层级。


删除贝壳找房首页 Activity 的主题背景, 可以在 xml 样式里设置或在 onCreate 里赋空;


确认 Activity 布局根节点 ViewGroup 是否设置背景色, 如果有的话要删除,让子 View/ViewGroup 绘制背景; (减少一次绘制)


判断 Fragment 布局根节点 ViewGroup 是否设置背景色,如果有的话要删除;(减少一次绘制)


首页每个布局卡片是否设置了背景;


像上图显示的推荐房源 ListView 是否设置了背景;


代码里是否有不必要的 notifyDataSetChanged,invalidate,requestLayout 等行为;这都会导致对应 View/ViewGroup 重新绘制;


背景重叠可以通过重写 onDraw 函数, 在缓存 canvas 里绘制完后一次性刷新到界面;



优化后首页


按照如上方式优化后效果很明显, 柱状图基本都在 16ms 以下, 基本满足性能需要,但还是有优化的空间。


这时上下快滑首页还是能感觉到 UI 卡顿, 这时就要分析 CPU 性能了, 即在主线程里是否做了耗时操作; 这时我们可以借助 TraceView 分析每个函数的执行周期; 打开 sdk 的 monitor。



选中要调试的进程, 点击红圈内按钮开始, 再次点击结束; 按照降序排列所有记录。 Parent 表示当前函数被调用的地方, Children 表示当前函数调用的其它函数; 怀疑 MyScrollView 的 handleMessage 在搞事情。



点击


“com.homelink.midlib.view.MyScrollView$1.handleMessage"这一行, 可以看到 handleMessage 函数的执行情况; 可以看到 onScroll 函数执行了 358 毫秒,而且是在主线程, UI 不卡顿等啥呢。



看看 MyScrollView 的 Handler 都做了什么, 就是 sendMessageDelayed 给自己发送个延时消息, 然后就是调用回调了。 继续看看这个 onScroll 都做了什么。


1override fun onSrcoll(scrollY: Int) {2LjExposureUtil.statistics(mExposureCardList, mVisibleList)3mRecommendHouseCard?.childExposure() 4}
复制代码


跟进代码看到 onScroll 就是触发了埋点, 但它是个耗时操作,在滑动过程中会多次执行 onScroll,导致卡顿的问题。


发现问题了, 解决就很简单了。 我们希望的是如丝般顺滑的滑动体验, 那就不要在滑动过程中阻塞主线程, 我们可以在滑动结束时做埋点操作;


1override fun onScrollStop() {2LjExposureUtil.statistics(mExposureCardList, mVisibleList)3mRecommendHouseCard?.childExposure()4}
复制代码


后续工作, 使用 RecyclerView 改造首页。


作者介绍:


高瑞,贝壳找房 Android 工程师,目前负责贝壳找房 app 安卓端研发工作。


本文转载自公众号贝壳产品技术(ID:gh_9afeb423f390)。


原文链接:


https://mp.weixin.qq.com/s/1380W4dFRSP3KAWJ0lyKnw


2019-09-23 08:003298

评论

发布
暂无评论
发现更多内容

可灵活定制的切片规则,才是RAG能够精准的核心关键

UniverAI智宇苍穹

rag 企业级AI基础设施 RAG应用 UniverAI 智宇苍穹

全国文旅AI整活儿,意外暴露了百度搜索的AIGC创意能力

脑极体

AI

Pi Network创始人Dr. Chengdiao Fan将发表演讲,探讨加密货币现实应用

股市老人

再见 greenplum_path.sh,你好 cloudberry-env.sh

酷克数据HashData

定义工业生产新范式!网易灵动发布全球首款全域智能无人装载机“灵载”

网易伏羲

网易伏羲 具身智能 网易灵动 无人装载机 装载机器人

我和AI一块做了个社交网页玩

Lemoon Can

获取电商平台电子面单 API 打印配置接口:从准备到落地的全流程指南

快递鸟

AI百舸争流时代,华为如何帮助行业破浪前行?

脑极体

AI

决战大促之夜:订单洪峰下的“数据速递”如何不宕机?

谷云科技RestCloud

数据处理 数据传输 数据集成平台 ipaas 订单同步

工业管理 项目管理经验总结(14)

万里无云万里天

项目管理 工厂运维

打破AI孤岛:CIO集成实战指南

qife122

人工智能 数据治理

微软SSO集成中的顺序用户ID身份验证绕过漏洞剖析

qife122

网络安全 单点登录 漏洞挖掘

直播预告:Mooncake 如何破解成本、吞吐与长上下文困局? |《AI 进化论》第五期

OpenAnolis小助手

开源 操作系统 Mooncake 大模型推理 AI进化论

智慧联防系统

深圳亥时科技

【RFID工具智能货架选购指南】适合仓库管理的品牌有哪些?

斯科信息

斯科信息 深科物联 RFID工具货架 RFID智能货架

小企业切入AI 一体机市场还有机会吗

慢点科技SlowTech

解锁 Windows Server 2025 日志的深入可见性与洞察

运维有小邓

日志管理 日志审计 #日志分析

MongoDB到关系型数据库:JSON字段如何高效转换?

谷云科技RestCloud

MySQL 数据库 mongodb ETL 数据集成平台

从 “被动耗能” 到 “主动优化”:MyEMS 开启商业建筑能源管理 “新范式”

开源能源管理系统

开源 开源能源管理系统

跨平台一键登录验证的技术实践:第三方认证多终端兼容方案解析

MobTech袤博科技

登录验证

IT资产管理内容有哪些?-ManageEngine卓豪

ServiceDesk_Plus

ManageEngine卓豪

藏在能耗数据里的 “省钱密码”,MyEMS 帮你一一解锁不止节能,更是 “碳管理利器”!

开源能源管理系统

开源 开源能源管理系统

思维导图用什么软件做?10个主流的导图工具集

职场工具箱

人工智能 思维导图 在线白板 AIGC 思维导图软件

社交媒体数据价值爆发:探讨Bright Data、Oxylabs、ThorData海外影音数据采集的潜能 原创

不觉心动

数据分析 数据采集

赋值语句

Miracle

开放、协同,2025 云栖大会“操作系统开源与 AI 进化分论坛”精彩回顾

OpenAnolis小助手

开源 操作系统 云栖大会 龙蜥社区

构建终极家庭实验室NUC集群 - 第三部分:Docker自动化与媒体堆栈

qife122

Docker 媒体服务器

免费≠将就!真正能打的招聘系统长这样!

AI得贤招聘官

实用的改进

Miracle

UniverAI平台让医药代表销售不再“翻资料”,合规更能非常高效

UniverAI智宇苍穹

AI 基础设施 企业级AI工程化 AI平台 UniverAI

飞跃海峡:鲲鹏凿开算力的“米迪运河”

脑极体

AI

安卓端贝壳找房APP首页滑动卡顿问题的解决_文化 & 方法_高瑞_InfoQ精选文章