性能优化系列之fragment的懒加载

     自从实习以来一直在忙着赶项目进度,没有时间(懒)总结。现在终于有空总结一下这两个多月的收获了。从性能优化中的fragment懒加载开始梳理吧。
     项目中使用ViewPager+Fragment,拿练手项目xMusic来说吧,在MainActivity中有两个fragment,一个是本地播放页面,一个是“发现”页面,“发现”页面包含广告轮播图和推荐歌单,图片资源比较多。正常打开app时两个fragment都会进行网络请求加载资源。刚打开app的时候,内存占用能上到88-90m。对于很大一部分只听本地歌曲的用户来说,加载“发现”页面不仅占用内存,还消耗网络资源。
     ViewPager中有一个方法  setOffscreenPageLimit(int limit)  可以设置预加载的页面数量。通过源码我们可以知道,这个方法设置的limit最终都不会小于1。因此对于我们这种情况,setOffscreenPageLimit(int limit)是无效的。

public void setOffscreenPageLimit(int limit) {
    if (limit < DEFAULT_OFFSCREEN_PAGES) {
        Log.w(TAG, "Requested offscreen page limit " + limit + " too small; defaulting to "
                + DEFAULT_OFFSCREEN_PAGES);
        limit = DEFAULT_OFFSCREEN_PAGES;
    }
    if (limit != mOffscreenPageLimit) {
        mOffscreenPageLimit = limit;
        populate();
    }
}
    
     这时候就需要使用fragment的懒加载机制,在用户手动滑入“发现”页面时fragment才进行加载,节省资源。
     fragment中提供一个方法 setUserVisibleHint,这个方法会在fragment对用户可见/不可见时回调,但是它并不在fragment的生命周期中,因此无法保证和生命周期方法的调用顺序。
    
     创建一个抽象类BaseLazyFragment,然后定义几个标识位
private boolean isFirstVisible = true;
private boolean isFirstInvisible = true;

private boolean isViewCreated;
private boolean isUIVisible;
   
     重
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值