我有三个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
,它会对整体性能有所帮助吗?
答案 0 :(得分:0)
是的,您肯定必须使用持有人模式RecyclerView
或ListView
。他们使用相同的视图(重用)来显示内容。
新视图创建是一项代价高昂的工作,并且肯定会影响性能。如果您有不同类型的观看次数,则可以为RecyclerView
定义多个观看次数。
This可能会对您有所帮助。
添加视图也会使其父视图无效,因此每次在ViewGroup中添加新视图时,ViewGroup都必须重绘。