前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 优化——布局优化

Android 优化——布局优化

作者头像
三流之路
发布2018-09-11 15:49:47
1.2K0
发布2018-09-11 15:49:47
举报
文章被收录于专栏:三流程序员的挣扎

Android 优化目录


理想情况下,60 FPS 以上就不会卡顿,就是 1 秒内要有 60 帧,所以每一帧要在 16ms 内绘制完成。如果一个页面无法在 16ms 内完成渲染,就会感到卡顿。

刷新机制可以看Android Project Butter分析或《Android应用性能优化最佳实践》2.1.2 刷新机制一节。

分析工具

GPU 呈现模式分析

详细介绍

执行 adb shell dumpsys gfxinfo 包名,在控制台显示日志

gfxinfo.JPG

当然体验下来,觉得没什么大用,比较鸡肋。

CPU Profiler

TraceView 在 Android Studio 3.0 以上已被弃用,被 CPU Profiler 替代,可参见 https://developer.android.com/studio/profile/monitor 的说明,CPU Profiler 的使用说明参见官方文档 https://developer.android.com/studio/profile/cpu-profiler

Layout Inspector

详情参考 https://developer.android.com/studio/debug/layout-inspector

layout.JPG

经常失败,网络搜索一大堆的错误情况,有些页面能成功,但这看代码也能分析出来,感觉依然是个鸡肋。

过度绘制

在“开发者选项”中打开“调试 GPU 过度绘制”(对未默认开启硬件加速的界面需要同时打开“强制进行 GPU 渲染”)。

  • 无色:没有过度绘制,每个像素绘制了 1 次。
  • 蓝色:每个像素多绘制了 1 次。大片的蓝色可以接受,如果整个窗口是蓝色的,可以尝试优化减少一次 绘制。
  • 绿色:每个像素多绘制了 2 次。
  • 淡红:每个像素多绘制了 3 次。一般来说,这个区域不超过屏幕的 1/4 是可以接受的。
  • 深红:每个像素多绘制了 4 次或者更多。严重影响性能,需要优化,避免深红色区域。

优化方法

  1. 合理选择 RelativeLayout/LinearLayout

RelativeLayout 层级低,但如果彼此依赖,在确定位置时,会给所有子 View 做一次排序,然后重新测量,因为会引起多次测量,所以性能略低;LinearLayout 层级深,会增加内存,引起栈溢出。

尽量不要嵌套使用 RelativeLayout。尽量不要在嵌套的 LinearLayout 中都使用 weight 属性。

  1. include、merge、ViewStub 的使用
  2. 使用 ConstraintLayout 降低层级
  3. 避免过度绘制 使用 Android 自带的一些主题时,Activity 的 DecorView 往往会有一个默认背景。如果布局里自定义了一个全屏的背景,DecorView 的背景无用,但它会产生一次 Overdraw。因此没有必要的话,可以移除: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.getWindow().setBackgroundDrawable(null); } ImageView 如果设置了 Resource 就可以把 Background 移除。 自定义 View 本身被认为一层,但是 onDraw 里可绘制时可能产生过度绘制,通过 canvas.clipRect 来解决,具体参见 《Android应用性能优化最佳实践》2.4.3 一节。
  4. 用 SurfaceView 或 TextureView 代替普通 View。SurfaceView 或 TextureView 可以通过将绘图操作移动到另一个单独线程上提高性能。
  5. 尽量为所有分辨率创建资源,减少不必要的硬件缩放,这会降低 UI 的绘制速度。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.07.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分析工具
    • GPU 呈现模式分析
      • CPU Profiler
        • Layout Inspector
          • 过度绘制
          • 优化方法
          相关产品与服务
          GPU 云服务器
          GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档