1.ViewStub你肯定听过,但是这些细节了解吗?
2.Android中使用ViewStub提高布局性能
3.Android 开发 对话框Dialog dismiss和hide方法的区别
ViewStub你肯定听过,但是这些细节了解吗?
1什么是ViewStub
ViewStub是一个看不见的、不占空间的虚拟视图,用于懒加载布局。当它变为可见或执行inflate()方法时,buffcall源码所指定的布局才会加载替换ViewStub。ViewStub存在于视图层次结构中,直到调用setVisibility(int)或inflate()方法。加载完成后,ViewStub会被移除,其占用的空间被新的布局替代。
2ViewStub构造方法
构造方法用于初始化ViewStub,单刷 mld 源码关键方法包括setVisibility和inflate()。需要注意的是,ViewStub只能被inflate一次,inflate后ViewStub对象将被置为空。ViewStub仅用于加载一个布局文件,而不是特定的View。
3inflate()方法解析
inflate()方法是加载布局的关键实现,其核心在于将指定的布局加载到视图层次结构中,替换ViewStub。使用该方法时,ViewStub将执行其功能,并在加载完成后被移除。从exe获得源码
4WeakReference使用
WeakReference用于管理对象的创建,确保内存资源的有效管理。在使用ViewStub时,WeakReference可以帮助避免内存泄漏问题。
5ViewStub为何无大小与不绘制
ViewStub在源码中被设计为无显示内容的特殊View,其draw和dispatchDraw方法被重写为不执行任何操作。onMeasure方法同样不执行任何操作,直接设置尺寸为0,以确保其在加载布局时不会占用任何空间。
6ViewStub为何不绘制
ViewStub通过设置WILL_NOT_DRAW标志来优化性能。当设置为true时,onDraw()方法将不会被调用,thinkphp源码设计模式避免不必要的绘制过程,从而提高效率。
7可以多次inflate()吗
ViewStub对象只能被inflate一次,之后将被置为空。因此,再次尝试inflate将导致错误。理解其内部实现机制有助于避免常见的使用错误。
8ViewStub不支持merge
ViewStub不支持包含merge标签的布局文件。尝试使用这样的布局将导致异常,因此在设计布局时需注意这一点。
9ViewStub使用场景
ViewStub常用于处理页面状态切换,如显示数据为空、华为溯源码查询加载失败或网络错误的UI。它支持全局和局部定制,能够优化加载速度并减少资源消耗,提高用户体验。
ViewStub总结分析
掌握ViewStub的原理和应用有助于在实际开发中提高代码效率和用户体验。理解其内部机制,如构造方法、inflate()方法、为何无大小与不绘制等,对于合理使用ViewStub至关重要。
Android中使用ViewStub提高布局性能
在Android开发中,使用ViewStub可以提升布局性能,特别是在面对复杂视图时。ViewStub是一种特殊的视图,能够在需要时延迟加载布局资源,从而提高整体性能。
首先,我们了解一下ViewStub。它在Java编程中相当于一个用于替代其他代码的临时程序模块。具体到Android中,ViewStub用于延迟加载布局资源,避免在应用启动时加载不必要的视图。
ViewStub的使用场景通常在布局中存在多个重复或动态生成的视图元素时。例如,在一个应用的首页,如果包含了一系列可以动态显示或隐藏的广告条,使用ViewStub可以在用户点击或滑动时动态加载和显示这些广告,从而提高性能。
要使用ViewStub,只需在XML布局文件中使用``标签,并设置其`android:layout`属性指向要加载的布局资源。在代码中,可以通过调用`inflate()`方法或设置`visibility`为`VISIBLE`来触发布局的加载。
值得注意的是,ViewStub不直接支持在布局中使用``标签。然而,通过间接的方式,如使用``标签,可以实现对特定视图的延迟加载。在验证过程中,直接使用``标签会导致崩溃,而使用间接方式则正常运行,表明ViewStub对间接引用的支持良好。
深入理解ViewStub的实现方式,可以发现`inflate()`方法和`setVisibility()`方法的共同点在于它们都可以实现加载布局,但`setVisibility()`方法只在ViewStub首次延迟初始化且`visibility`属性非`GONE`时才调用`inflate()`方法。
通过研究ViewStub的源码,我们可以更全面地理解其工作原理。此外,关于如何优化视图和提高布局性能的探讨,能够对开发者大有裨益。
此外,作者计划在知乎上进行一场名为《我学安卓的那些套路》的直播分享会,旨在分享学习Android的经验和心得。直播内容涵盖了学习路径、常见问题解决策略、优化技巧等多个方面。对于对Android开发感兴趣或有疑问的朋友,欢迎参与直播,获取更多实用知识。
Android 开发 对话框Dialog dismiss和hide方法的区别
1.
cancel会去调dismiss的,如果调用的cancel的话就可以监听dialoginterface.oncancellistener
,如下
2.
dismiss可以在任何线程调用,但是最好不要覆写dismiss方法,实在需要就在onstop里去override。
3.
在dismissdialog里调用了onstop
4.
补上hide方法,注释上说了hide只是隐藏了对话框并没有销毁,如果打算用这方法来灭掉对话框就会出现问题,在activity销毁的时候就会出现崩溃日志了,因为
activity销毁时是需要把对话框都关闭掉的。
5.
hide里的操作: