iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android 开发中fragment预加载问题
  • 941
分享到

Android 开发中fragment预加载问题

fragmentAndroid 2022-06-06 04:06:11 941人浏览 薄情痞子
摘要

我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加

我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源。这样的结果,我们当然不会满意。那么,能不能做到当切换到这个fragment的时候,它才去初始化呢?

答案就在Fragment里的setUserVisibleHint这个方法里。请看关于Fragment里这个方法的api文档(国内镜像地址:Http://zdz.la/YrpKlu):


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. 
 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. 
 Parameters 
isVisibleToUser true if this fragment's UI is currently visible to the user (default), false if it is not. 

该方法用于告诉系统,这个Fragment的UI是否是可见的。所以我们只需要继承Fragment并重写该方法,即可实现在fragment可见时才进行数据加载操作,即Fragment的懒加载。

代码如下:


 
package cn.irains.access_control_v2.common; 
import Android.support.v4.app.Fragment; 
 
public abstract class LazyFragment extends Fragment { 
  protected boolean isVisible; 
   
  @Override 
  public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if(getUserVisibleHint()) { 
      isVisible = true; 
      onVisible(); 
    } else { 
      isVisible = false; 
      onInvisible(); 
    } 
  } 
  protected void onVisible(){ 
    lazyLoad(); 
  } 
  protected abstract void lazyLoad(); 
  protected void onInvisible(){} 
} 

在LazyFragment,我增加了三个方法,一个是onVisiable,即fragment被设置为可见时调用,一个是onInvisible,即fragment被设置为不可见时调用。另外再写了一个lazyLoad的抽象方法,该方法在onVisible里面调用。你可能会想,为什么不在getUserVisibleHint里面就直接调用呢?

我这么写是为了代码的复用。因为在fragment中,我们还需要创建视图(onCreateView()方法),可能还需要在它不可见时就进行其他小量的初始化操作(比如初始化需要通过AIDL调用的远程服务)等。而setUserVisibleHint是在onCreateView之前调用的,那么在视图未初始化的时候,在lazyLoad当中就使用的话,就会有空指针的异常。而把lazyLoad抽离成一个方法,那么它的子类就可以这样做:


public class OpenResultFragment extends LazyFragment{ 
  // 标志位,标志已经初始化完成。 
  private boolean isPrepared; 
  @Override 
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    Log.d(LOG_TAG, "onCreateView"); 
    View view = inflater.inflate(R.layout.fragment_open_result, container, false); 
    //XXX初始化view的各控件 
  isPrepared = true; 
    lazyLoad(); 
    return view; 
  } 
  @Override 
  protected void lazyLoad() { 
    if(!isPrepared || !isVisible) { 
      return; 
    } 
    //填充各控件的数据 
  } 
} 

在上面的类当中,我们增加了一个标志位isPrepared,用于标志是否初始化完成。然后在我们所需要的初始化操作完成之后调用,如上面的例子当中,在初始化view之后,设置 isPrepared为true,同时调用lazyLoad()方法。而在lazyLoad()当中,判断isPrepared和isVisible只要有一个不为true就不往下执行。也就是仅当初始化完成,并且可见的时候才继续加载,这样的避免了未初始化完成就使用而带来的问题。

在这里我对fragment的懒加载实现的介绍就到此为止,如果你有兴趣,可以基于此再深入探究,比如写一个带有缓初始化和可见时刷新的特性的Fragment。

以上所述是小编给大家介绍的Android 开发中fragment预加载问题,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

您可能感兴趣的文章:Android design包自定义tablayout的底部导航栏的实现方法Android 中TabLayout自定义选择背景滑块的实例代码android TabLayout使用方法详解Android TabLayout(选项卡布局)简单用法实例分析Android中ViewPager获取当前显示的FragmentAndroid中fragment与activity之间的交互(两种实现方式)Android实现Tab布局的4种方式(Fragment+TabpageIndicator+ViewPager)Android中Fragment管理及重叠问题的解决方法Android使用TabLayout+Fragment实现顶部选项卡


--结束END--

本文标题: Android 开发中fragment预加载问题

本文链接: https://www.lsjlt.com/news/22654.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android开发中怎么解决Fragment +Viewpager滑动页面重复加载的问题
    这篇文章给大家分享的是有关Android开发中怎么解决Fragment +Viewpager滑动页面重复加载的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言 之前在做一个Viewpager上面加载多个Fr...
    99+
    2023-05-30
    android fragment viewpager
  • Android开发之Fragment懒加载的几种方式及性能对比
    目录1. Support时代的懒加载2. AndrodX时代的懒加载3. ViewPager2时代的懒加载4. ViewPage和ViewPager2的性能对比前言: TabLayo...
    99+
    2024-04-02
  • android开发中使用Handler怎么实现预加载功能
    这篇文章将为大家详细讲解有关android开发中使用Handler怎么实现预加载功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在进行Android客户端界面开发时,我们常常会需要将从服务...
    99+
    2023-05-31
    android handler roi
  • Android在ViewPager中如何使用Fragment的懒加载
    这篇文章给大家分享的是有关Android在ViewPager中如何使用Fragment的懒加载的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。我们先看一下效果:首先,我们要知道什么是懒加载:懒加载,就是先初始化控件...
    99+
    2023-05-31
    android fragment viewpager
  • PHP开发缓存的预热与预加载
    PHP开发缓存的预热与预加载,需要具体代码示例随着互联网和移动应用的快速发展,用户对于网站和应用的响应速度要求也越来越高。为了提升用户体验,缓存一直被广泛应用于网站和应用开发中。而在PHP开发中,缓存的预热和预加载是提升性能的重要环节。本文...
    99+
    2023-11-07
    预加载 缓存预热 PHP开发
  • Android中Fragment 重叠遮盖问题解决办法
    1.导致Fragment 重叠 和遮盖的原因 主要还是因为Fragment的状态保存机制,当系统内存不足时,Fragment的主Activity被回收,Fragment的实例并没有随之被回收。Activity被系统回收时,会主动调用onSa...
    99+
    2023-05-31
    android fragment 重叠遮盖
  • 如何解决预加载InstantClick的问题
    这篇文章主要介绍如何解决预加载InstantClick的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在改造的时候代码高亮没法执行,准确的说是只执行一次,第二次就不执行了。所以发...
    99+
    2024-04-02
  • Android开发常见问题
    常见问题 Minimum supported Gradle version is 7.2. Current version is 6.8. If using the gradle wrapper 看下...
    99+
    2023-09-04
    android android studio
  • 【Android开发基础】Fragment(碎片)中ViewModel的使用
    文章目录 一、简述二、创建ViewModel三、了解LiveData四、使用ViewModel1、单体数据2、实体类数据(1)创建LiveData实体(2)编写ViewModel ...
    99+
    2023-09-22
    android 观察者模式
  • Android开发问题有哪些
    这篇“Android开发问题有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android开发问题有哪些”文章吧。1.如...
    99+
    2023-07-04
  • Android开发中如何自定义加载动画
    这篇文章主要为大家展示了“Android开发中如何自定义加载动画”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android开发中如何自定义加载动画”这篇文章吧。一、demo简介效果展示如下图,...
    99+
    2023-06-29
  • 如何在Android开发中利用Glide加载图片
    这期内容当中小编将会给大家带来有关如何在Android开发中利用Glide加载图片,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。添加依赖:compile 'com.github.bump...
    99+
    2023-05-31
    glide android roi
  • Android开发之自定义加载动画详解
    目录一、demo简介二、分析贪吃动画的尺寸比例三、画圆四、实现张嘴闭嘴动画五、小球移动动画一、demo简介 1.效果展示如下图,我截了三个瞬间,但其实这是一个连续的动画,就是这个大圆...
    99+
    2024-04-02
  • Android WebView加载h5打开麦克风与摄像头的权限问题
    目录 快速处理app向系统申请录音与相机权限h5向app申请录音和相机权限 详细解答app权限与h5权限录音与麦克风默许的风险最佳实践 Android webview h5 麦克风权限,摄像头(相机)权限实现与填坑。 ...
    99+
    2023-08-17
    android webview java h5麦克风 h5摄像头
  • Go语言中如何处理并发模块加载问题?
    Go语言中如何处理并发模块加载问题?在Go语言中,并发是一项非常强大的功能。它允许我们同时执行多个任务,提高程序的性能和响应能力。然而,并发编程也带来了一些挑战,其中之一就是并发模块的加载问题。本文将介绍如何使用Go语言中的特性来解决并发模...
    99+
    2023-10-22
    Go语言 并发处理 模块加载
  • 分析Java中的类加载问题
    目录一、Java类的加载顺序二、类加载过程三、被动引用中和类静态初始化的关系四、类加载器双亲委派一、Java类的加载顺序 引用1个网上的经典例子,并做稍许改动,以便大家更好地理解。 ...
    99+
    2024-04-02
  • Android小程序开发中遇到的问题有哪些
    本篇内容介绍了“Android小程序开发中遇到的问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!渲染列表时用 block 包裹<...
    99+
    2023-06-29
  • 解决Gradle sync failed: Gradle Sync Issues问题(Android开发/Android Studio)
    我刚学移动开发的时候,打开android studio会提示下图所示的问题:Could not install Gradle distribution from 'https://services.gradle.org/distributi...
    99+
    2023-09-01
    android android studio gradle Powered by 金山文档
  • 如何解决Android中Glide与CircleImageView加载圆形图片的问题
    这篇文章将为大家详细讲解有关如何解决Android中Glide与CircleImageView加载圆形图片的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 不使用占位符注释掉这两句代码即可。.pl...
    99+
    2023-05-30
    glide
  • 【Android学习】Android studio环境搭建-解决下载gradle慢&加载mainfest.xml慢的问题
    转载:https://blog.csdn.net/qq_31881469/article/details/78646406/ 目录 1、解决网络连接问题 (1)问题描述  (2)方法步骤  2、解决内存吃紧问题  (1)问题描述  (2)方...
    99+
    2023-09-05
    android android studio 环境配置
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作