Android最高效的列表容器

时间:2019-06-04 11:50:06

标签: java android android-layout

PS。我是android开发的新手,请多加考虑。

我的测试应用程序包含一个自定义视图,如下所示:

enter image description here

我不会包含该视图的XML代码,因为这会使帖子不必要地大

此自定义视图以LinearLayout作为根元素。在LinearLayout中,还有2个嵌套的LinearLayouts。即使乍一看似乎可以使用RelativeLayout,在尝试所有容器之后,只有LinearLayout才能达到这种外观。

问题是我需要动态填充自定义视图的列表(上面的视图)。范围是40-80。我尝试在测试环境中动态生成60个以上的自定义视图,作为RecycleViewScrollView的子级。

在测试环境中,在物理设备(三星Galaxy J2)上,我看到应用程序的性能下降了一点,但并没有太大下降。不过,我仍然可以看到该应用占用了过多的设备内存。

我已经阅读了很多关于布局性能的SO帖子。从文档中,我发现使用过多的嵌套LinearLayout可能会创建复杂而复杂的视图层次结构。因此,我尝试尽可能使用FrameLayoutRelativeLayout

我的情况实际上并非唯一。如果您是正在阅读本文的开发人员,并且具有开发一些大型应用程序的经验,那么您肯定会遇到需要多次动态生成自定义视图的场景。那么,这里的建议是什么? 在诸如Facebook或什至Facebook Lite的应用程序中,或在具有大量自定义视图的其他应用程序中大量填充的应用程序中,它们实际使用哪些布局来确保最佳性能?鉴于我的情况,我的方法正确吗?

2 个答案:

答案 0 :(得分:4)

每当您使用#include <shlobj.h> int main() { IProgressDialog* dialog = NULL; HRESULT hr = 0; hr = CoInitialize(NULL); hr = CoCreateInstance(&CLSID_ProgressDialog, NULL, CLSCTX_INPROC_SERVER, &IID_IProgressDialog, &dialog); hr = dialog->lpVtbl->SetTitle(dialog, L"Progress"); // this line causes the run time check failure 时,它只会创建足以填充设备屏幕/视口的视图。其他所有视图仅是“回收的”,这意味着,这些视图将一次又一次地被重用,但只能与新数据一起使用。

您可能会遇到的延迟是由于RecyclerView上方的ScrollView。除非您使用沉重的图像而不使用Glide / Picasso加载图像,否则RecyclerView不会滞后。

答案 1 :(得分:0)

RecyclerView是作为GridView和ListView的后继者添加到android studio的ViewGroup。这是对两者的改进,可以在最新的v-7支持包中找到。创建它的目的是为了使任何具有XML布局的列表的构造成为可能,该列表可以大量自定义,同时提高ListViews和GridViews的效率。通过回收用户看不见的视图来实现此改进。例如,如果用户向下滚动到项目4和5可见的位置;第1、2和3项将从内存中清除,以减少内存消耗。