提高 UI 性能
Improving UI performance
我用 Android studio profiler(记录的系统跟踪)检查了我的 UI,我得到了以下结果:
正如您在这里看到的,当我打开我的片段时,加载一个帧需要 28 毫秒。
我们还可以看到,几乎所有的时间都是通过遍历和测量得到的。我试图重构我的 xml,现在它看起来像:
<MotionLayout>
<SwiperefreshLayout>
<NestedScrollView>
<LinearLayout>
<include
layout="cardView1">
<include
layout="cardView2">
//..........
<include
layout="cardVie7">
<LinearLayout>
<NestedScrollView>
<SwipeRefreshLayout>
<MotionLayout>
它很复杂 UI,有很多嵌套的卡片,里面可以有 recycleview 和其他内容。如您所见,在我重构之后,帧时间仍然存在一些问题。有没有办法提高我的 UI 性能,或者至少获得更详细的信息,了解问题所在以及为什么绘制 UI 需要这么长时间?
首先,MotionLayout 看起来没有必要。另外,您可以使用 RecyclerView 来显示卡片。
添加自定义 Trace 事件并对应用程序进行分析后,我发现 recyclerView 项目 inflation 占用了几乎所有的帧时间。使用 DiffUtil and RecyclerView Async Loading
解决了问题
我用 Android studio profiler(记录的系统跟踪)检查了我的 UI,我得到了以下结果:
<MotionLayout>
<SwiperefreshLayout>
<NestedScrollView>
<LinearLayout>
<include
layout="cardView1">
<include
layout="cardView2">
//..........
<include
layout="cardVie7">
<LinearLayout>
<NestedScrollView>
<SwipeRefreshLayout>
<MotionLayout>
它很复杂 UI,有很多嵌套的卡片,里面可以有 recycleview 和其他内容。如您所见,在我重构之后,帧时间仍然存在一些问题。有没有办法提高我的 UI 性能,或者至少获得更详细的信息,了解问题所在以及为什么绘制 UI 需要这么长时间?
首先,MotionLayout 看起来没有必要。另外,您可以使用 RecyclerView 来显示卡片。
添加自定义 Trace 事件并对应用程序进行分析后,我发现 recyclerView 项目 inflation 占用了几乎所有的帧时间。使用 DiffUtil and RecyclerView Async Loading
解决了问题