Android fragment懒加载之初探
来源:互联网 发布:apple解压软件 编辑:程序博客网 时间:2024/06/06 02:08
在Android的开发过程中,会遇到使用使用fragment来切换页面,特别是使用viewpager和fragment来切换页面的时候,由于viewpager的预加载的机制,当显示twofragment时,同时会预加载onefragment和threefragment。如何每个页面中都有大量的耗时操作,比如加载大量的网络图片,会消耗很多内存资源。
基于这个原因,可以通过设置如果当前fragment ui可见才开始加载数据。就可以解决这个问题了。于是便出现了
fragment懒加载机制。详细使用可查看如下介绍:
Fragment的源码中有一个方法 setUserVisibleHint
源码:
** * Set a hint to the system about whether this fragment's UI is currently visible * to the user. This hint defaults to true and is persistent across fragment instance * state save and restore. * * <p>An app may set this to false to indicate that the fragment's UI is * scrolled out of visibility or is otherwise not directly visible to the user. * This may be used by the system to prioritize operations such as fragment lifecycle updates * or loader ordering behavior.</p> * * @param isVisibleToUser true if this fragment's UI is currently visible to the user (default), * false if it is not. * * 该方法用于告诉系统,这个Fragment的UI是否是可见的。所以我们只需要继承Fragment并重写该方法, * 即可实现在fragment可见时才进行数据加载操作,即Fragment的懒加载。 */
所以可以定义一个基类如下:
public abstract class BaseLazyFragment extends Fragment{ protected boolean isVisible; //判断fragment的UI是否可见 @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(getUserVisibleHint()){ //当前fragment UI可见 isVisible=true; onVisible(); //可见的操作,可见时才开始加载数据(注意:通过测试发现该方法有可能在onCreateView之前调用, // 所以加载数据一定注意有可能会出现空指针异常) }else{ isVisible=false; onInvisible(); //执行ui不可见的操作 } } protected void onVisible(){ lazyLoad(); } protected abstract void lazyLoad(); protected void onInvisible(){}}
子类如下;
public abstract class BaseLazyFragment extends Fragment{ protected boolean isVisible; //判断fragment的UI是否可见 @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(getUserVisibleHint()){ //当前fragment UI可见 isVisible=true; onVisible(); //可见的操作,可见时才开始加载数据(注意:通过测试发现该方法有可能在onCreateView之前调用, // 所以加载数据一定注意有可能会出现空指针异常) }else{ isVisible=false; onInvisible(); //执行ui不可见的操作 } } protected void onVisible(){ lazyLoad(); } protected abstract void lazyLoad(); protected void onInvisible(){}}相信聪明的你,已经清楚了如何使用fragment的懒加载了
1 0
- Android fragment懒加载之初探
- Android之fragment初探
- Android之Fragment懒加载
- Android之Fragment懒加载
- android ViewPager+Fragment之懒加载
- Android之Fragment懒加载分析
- Android开发之Fragment懒加载技术
- Android之Viewpager+Fragment实现懒加载
- Android之Viewpager+Fragment实现懒加载
- Android之ViewPager+Fragment实现懒加载
- Android Fragment 懒加载
- Android之Fragment静态加载
- Android之Fragment静态加载
- viewpager+fragment之fragment懒加载
- Android Fragment初探
- Android之RadioButton配合Fragment实现懒加载
- Android开发之Viewpager+Fragment实现懒加载
- Android优化方案之--Fragment的懒加载实现
- Yii入门教程之目录结构、入口文件及路由设置
- PhysX仿真的关键词:阻尼率 关键词:DampingRate
- Maven 第一个Maven案例 HelloWorld
- 欢迎使用CSDN-markdown编辑器
- DCOS建立 universe私有框架库
- Android fragment懒加载之初探
- 利用adb无线连接android手机进行调式 无需获得root权限
- ios push卡顿,多次push同一个页面
- 归档相关的数据字典
- Java设计模式-----单例模式
- Android Studio导入项目报:错误: 非法字符: '\ufeff'
- C程序的内存层次
- 全局搜索特定字符 pycharm
- 自定义插件实现网易云音乐首页图片轮播