我如何知道何时呈现多个视图

时间:2016-12-25 18:45:32

标签: android performance

我有三个LinearLayout次观看,我加载了一些我自己的观点:

linearLayout1.addView(view11);
linearLayout1.addView(view12);
linearLayout2.addView(view21);
linearLayout2.addView(view22);
linearLayout3.addView(view31);
linearLayout3.addView(view32);

问题在于,当我必须加载许多视图(超过30个)时,性能会下降。具体而言,这种情况发生了:

我启动活动,活动呈现,我从本地sqlite加载所需的数据加载到屏幕上,然后我开始将自定义视图添加到线性布局。

此时,应用程序冻结,2-3秒后,我的所有自定义视图都会一起显示。

我尝试在每个自定义视图的Log中放置一个onMeasure,我发现每个视图几乎在同一时间确实准备好了(< 1ms之间的差异)。

我正在寻找一种方法来了解所有内容何时准备就绪,并且用户可以再次与UI进行交互。

具体来说,我想在活动开始时显示ProgressDialog,并在屏幕为用户准备好的2-3秒后隐藏它。

有什么想法吗?

此外,如果我将LinearLayouts替换为ListViews并添加自定义适配器以添加我的自定义视图而不是使用addView,它会对整体性能有所帮助吗?

1 个答案:

答案 0 :(得分:0)

是的,您肯定必须使用持有人模式RecyclerViewListView。他们使用相同的视图(重用)来显示内容。

新视图创建是一项代价高昂的工作,并且肯定会影响性能。如果您有不同类型的观看次数,则可以为RecyclerView定义多个观看次数。

This可能会对您有所帮助。

添加视图也会使其父视图无效,因此每次在ViewGroup中添加新视图时,ViewGroup都必须重绘。