( PS。我是android开发的新手,请多加考虑。)
我的测试应用程序包含一个自定义视图,如下所示:
(我不会包含该视图的XML代码,因为这会使帖子不必要地大)
此自定义视图以LinearLayout
作为根元素。在LinearLayout
中,还有2个嵌套的LinearLayouts
。即使乍一看似乎可以使用RelativeLayout
,在尝试所有容器之后,只有LinearLayout
才能达到这种外观。
问题是我需要动态填充自定义视图的列表(上面的视图)。范围是40-80。我尝试在测试环境中动态生成60个以上的自定义视图,作为RecycleView
中ScrollView
的子级。
在测试环境中,在物理设备(三星Galaxy J2)上,我看到应用程序的性能下降了一点,但并没有太大下降。不过,我仍然可以看到该应用占用了过多的设备内存。
我已经阅读了很多关于布局性能的SO帖子。从文档中,我发现使用过多的嵌套LinearLayout
可能会创建复杂而复杂的视图层次结构。因此,我尝试尽可能使用FrameLayout
,RelativeLayout
。
我的情况实际上并非唯一。如果您是正在阅读本文的开发人员,并且具有开发一些大型应用程序的经验,那么您肯定会遇到需要多次动态生成自定义视图的场景。那么,这里的建议是什么? 在诸如Facebook或什至Facebook Lite的应用程序中,或在具有大量自定义视图的其他应用程序中大量填充的应用程序中,它们实际使用哪些布局来确保最佳性能?鉴于我的情况,我的方法正确吗?
答案 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项将从内存中清除,以减少内存消耗。