理论教育 延迟加载实现方法——ViewStub解析

延迟加载实现方法——ViewStub解析

时间:2023-06-19 理论教育 版权反馈
【摘要】:延迟加载的功能非常重要,特别是在界面中显示的内容比较多并且所占空间比较大时。在Android应用程序中,可以使用ViewStub实现延迟加载功能。ViewStub是一个不可见的,大小为0的View(视图),最佳用途就是实现View的延迟加载,在需要的时候再加载View,这和Java中常见的性能优化方法延迟加载一样。在没有调用setVisibility()函数或inflate()函数之前,ViewStub一直存在于组件树层级结构中。在初始化资源“mySubTree”后,从父组件中删除了stub,然后用“mySubTree”替代了stub的位置。

延迟加载实现方法——ViewStub解析

延迟加载的功能非常重要,特别是在界面中显示的内容比较多并且所占空间比较大时。在Android应用程序中,可以使用ViewStub实现延迟加载功能。ViewStub是一个不可见的,大小为0的View(视图),最佳用途就是实现View的延迟加载,在需要的时候再加载View,这和Java中常见的性能优化方法延迟加载一样。

当调用ViewStub的setVisibility()函数设置为可见或调用inflate()函数初始化该View的时候,ViewStub引用的资源开始初始化,然后引用的资源替代ViewStub填充在ViewStub的位置。在没有调用setVisibility()函数或inflate()函数之前,ViewStub一直存在于组件树层级结构中。但是由于ViewStub是轻量级的,所以对性能影响非常小。可以通过ViewStub的inflatedId属性来重新定义引用的Layout ID。例如下面的代码:

在上述代码中定义了ViewStub,这可以通过ID“stub”来找到。在初始化资源“mySubTree”后,从父组件中删除了stub,然后用“mySubTree”替代了stub的位置。初始资源"mySubTree"得到的组件可以通过inflatedId指定的ID:“subTree”来引用。最后初始化后的资源被填充到一个宽为120、高为40的位置。

在初始化ViewStub对象时,建议读者使用下面的方式来实现。(www.daowen.com)

当调用函数inflate()的时候,ViewStub被引用的资源替代,并且返回引用的View。这样程序可以直接得到引用的View,而无需再次调用函数findViewById()来查找了,这样提高了效率,达到了优化的目的。

注意:ViewStub优化方式也不是万能的,其中最大的缺陷是暂时还不支持<merge/>标签

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈