Android正在膨胀子视图,导致跳过帧

Android正在膨胀子视图,导致跳过帧,android,android-layout,layout-inflater,android-inflate,Android,Android Layout,Layout Inflater,Android Inflate,我的应用程序包含一个viewpager,每个页面片段的布局如下: <ScrollView> <LinearLayout> ... other views ... 其他观点 其中一个“其他视图”是运行时在循环中填充的LinearLayout。每个项目都是从xml中膨胀出来的。我已经确定了对LayoutInflater.inflate()的每次调用平均花费4-6毫秒。在我所有的片段和一些包含多个“动态填充列表”的片段之间,我在启动

我的应用程序包含一个viewpager,每个页面片段的布局如下:

<ScrollView>
    <LinearLayout>
        ...
        other views

...
其他观点
其中一个“其他视图”是运行时在循环中填充的
LinearLayout
。每个项目都是从xml中膨胀出来的。我已经确定了对
LayoutInflater.inflate()
的每次调用平均花费4-6毫秒。在我所有的片段和一些包含多个“动态填充列表”的片段之间,我在启动期间对这些子布局进行了40-50次的膨胀,这会增加许多跳过的帧

我正在寻找一种更便宜的方法来创建所有这些视图

一个列表中的所有子视图都是相同的,是否可以膨胀一个视图并以比调用
inflate()
更快的方式将其复制到另一个实例

是否可以像listview那样重用这些视图

最后一个可能的解决方案是,手动创建这些子视图会比从xml膨胀它们更快吗


因此,总结一下问题,寻找在代码中创建视图的最便宜的方法。感谢阅读。

使用
列表视图
回收视图
或其他基于适配器的容器。您不仅在浪费CPU,而且在浪费堆空间,因为许多设备无法同时显示所有子设备。“是否可以像listview那样重复使用这些视图?”--为什么现在不使用
listview
RecyclerView
,等等?我在上面和这些列表之间有许多其他视图。这些页面也在不断更新(根据应用程序的性质),新的视图可能在所有设备上都可见,也可能不可见。你是对的,最好使用listview,但这样做会涉及重写每个页面片段布局和类,我可能很快就会这么做,但我只是希望有一个更简单的解决方案来解决跳帧问题。使用方法跟踪确定您的时间花在了什么地方。如果它似乎是在XML解析之类的东西中,那么Java中的手动组装会更快。我的猜测是,你会发现时间是与视图本身相关的事情(例如,设置图像),这与这些视图是如何形成的无关。如果我的猜测是正确的,那么您唯一的选择就是使用更少的视图,并且对于您来说,切换到类似于
RecyclerView
的东西要比大量重写
RecyclerView
的工作少得多。好的,谢谢您的建议。在xml膨胀中,帧跳过率为99%。我将尝试手动创建它们,看看是否有帮助。否则看起来我将重写大量代码。