sak*_*das 16 performance android viewstub
我有一个ListView,其中listview的每一行包含大约10个ImageButtons.这些按钮中的大多数都具有visibility = Gone,并且仅在极少数情况下出现.我想知道是否值得用ViewStubs替换这些ImageButton以避免一直为listview的所有行加载它们(以及它们包含的图像).然后他们的可见性再次设置为"Gone",所以我不确定加载它们有什么影响.他们的图像真的被加载了吗?
请注意,我所说的是将8个ImageButtons替换为8个ViewStub,而不是1个
干杯
Tau*_*qir 10
A ViewStub是一种dumb and lightweight观点.它有no dimension,它没有绘制任何东西,也没有以任何方式参与布局.这意味着a ViewStub非常cheap to inflate and very cheap to keep处于视图层次结构中.A ViewStub可以最好地描述为a lazy include.通过引用的布局ViewStub是inflated and added对用户界面只when you decide左右.
有时您的布局可能需要complex views很少使用.无论是项目详细信息,进度指示器还是撤消消息,您都可以通过仅在需要时加载视图来减少内存使用并加快渲染速度.
简单的a ViewStub用于提高渲染布局的效率.通过使用ViewStub,可以创建手动视图,但不能将视图添加到视图层次结构.在运行时,可以轻松充气,同时ViewStub充气,内容viewstub将被替换为定义的布局viewstub.
在ViewStub将加载只有当你真正使用它/需要它,即当您的可见性设置为VISIBLE(实际可见)或INVISIBLE(仍然不可见,但其大小是不是0了).ViewStub一nice optimization,因为你可以有一个复杂的layout with tons of small views or headers任何地方,而且还有你的Activity load up really fast.一旦你使用其中一个视图,它将被加载.
您必须首先添加ViewStub布局,然后才能将其充气到另一个视图.
注意:一个缺点ViewStub是它当前不支持<merge/>布局中的标记要膨胀.Alos ViewStub不能多次使用.同样保持长寿命的参考ViewStub是不必要的,如果需要的话,最好在充气后将其取消,这样GC可以吃掉它.
我们假设你的ViewStub身份证是view_stub.您需要在以下位置执行以下操作activity:
ViewStub viewStub = (ViewStub) findViewById(R.id.view_stub);
View inflatedView = viewStub.inflate();
ImageButton button = (ImageButton) inflatedView.findViewById(R.id.button);
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用按钮执行任何操作:)也就是说,inflate方法返回存根布局,其中包含XML文件中的实际元素.
当然,您始终可以拥有onClickXML属性或可以动态调用.
Is a ViewStub worth it?
->For the scenarios that you are specifying, I think `ViewStub` will be worth-shot.
Run Code Online (Sandbox Code Playgroud)
请参阅下面的网址 ViewStub
http://android-developers.blogspot.in/2009/03/android-layout-tricks-3-optimize-with.html
http://developer.android.com/reference/android/view/ViewStub.html
http://developer.android.com/training/improving-layouts/loading-ondemand.html
而不是ViewStub你可以尝试<\include> tag.在<include/>将只包含XML内容的基础xml文件,就好像整个事情只是一个大的文件.这是在不同布局之间共享布局部件的好方法.
android中<include>和<ViewStub>的区别
编辑:刚刚注意到 Endzeit 在我之前评论了一个类似的方向。
我将首先围绕有和没有视图的膨胀代码进行一些基准测试 - 只需注释掉适配器代码,这样它就不会尝试访问不存在的视图。
如果从布局中删除视图确实给您带来了您认为必要的改进,并且由于您说视图仅出现在您正在适配器中检查的极少数情况下,那么不要夸大这些视图甚至使用查看存根,在代码中创建它们并根据需要添加/删除它们(使用查看器引用它们)。
你甚至可以更进一步,懒惰地创建这些视图,类似于图像的懒惰加载,但我只会在再次运行一些基准测试后才这样做。
我会使用 ViewStubs 来加载复杂的布局,而不是简单的 ImageButtons。
编辑2:
查看 ViewStub inflate 命令,这就是它在需要可见时所做的事情,您可以看到它会破坏给定的布局,然后将其添加到父布局中 - 由于您添加了一个简单的 ImageButton,因此您可以通过没有 ViewStub 来获得性能只需在代码中添加 ImageButton 即可。 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/view/ViewStub.java#ViewStub.inflate%28%29
| 归档时间: |
|
| 查看次数: |
4612 次 |
| 最近记录: |