AndroidX对ViewPager懒加载的影响及解决方案,Android大厂技术面试题汇总

本文讲述了从旧版Fragment的onResume到AndroidX中的onStart变化,如何影响Fragment的初始化和用户可见状态判断。作者提供了FragmentPagerAdapter的修改示例,并分享了迁移AndroidX后的代码调整。最后,还提及了一个全面的Android学习资源集合,旨在帮助开发者提升技能。
摘要由CSDN通过智能技术生成

return fragment;
}

追踪进入mCurTransaction.add(container.getId(), fragment);方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void doAddOp(int containerViewId, Fragment fragment, @Nullable String tag, int opcmd) {
//…省略非重点代码
addOp(new Op(opcmd, fragment));
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

添加的是一个Op对象,看看Op是如何初始化的。

Op(int cmd, Fragment fragment) {
this.mCmd = cmd;
this.mFragment = fragment;
//初始化执行到onResume()
this.mOldMaxState = Lifecycle.State.RESUMED;
this.mCurrentMaxState = Lifecycle.State.RESUMED;
}

到这里,我们就能明白了如果是旧版本,Fragment初始化的时候,默认会执行到onResume(),而AndroidX只会执行到onStart(),所以我们迁移到AndroidX之后,不需要全都依靠setUserVisibleHint()来判断当前页面是否显示,我们可以根据onResume()来判断。

3 迁移到AndroidX之后,BaseFragment相应的修改

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mRoot = inflater.inflate(getLayoutId(), container, false);
Log.d(getLifeCycleTag(), “onCreateView”);
initView(mRoot);
//在View创建完毕之后,isViewCreate 要变为true
isViewCreated = true;
//下面2段代码可以删除
//if (!isHidden() && getUserVisibleHint())
//dispatchVisibleState(true);
return mRoot;
}

@Override
public void onResume() {
super.onResume();
Log.d(getLifeCycleTag(), “onResume”);
/* 旧版本
if (!isFirstVisible) {
if (!isHidden() && !currentVisibleState && getUserVisibleHint())
dispatchVisibleState(true);
}
*/
//新版本
if (!isHidden() && !currentVisibleState && isResumed()) {
dispatchVisibleState(true);
}
}

@Override
public void onPause() {
MobclickAgent.onPageEnd(this.getClass().getName());
super.onPause();
Log.d(tag,"onPause: ");
/* 旧版本
if (currentVisibleState && !isResumed()) {
dispatchVisibleState(false);
}
*/
//新版本
if (currentVisibleState && !isResumed()) {
dispatchVisibleState(false);
}
}
//其他不需要更改

三、总结

迁移到AndroidX,主要改变的是FragmentPagerAdapter对Fragment的初始化方式进行了优化,所以才需要进行这样修改,其实问题不难,顺着逻辑看一下源码就能发现区别啦。希望对大家有所帮助,如果文章有不足之处,请不吝指出,谢谢。

四、鸣谢

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

sTZ6HiTe-1711627755404)]

[外链图片转存中…(img-VW3kGxXI-1711627755405)]

[外链图片转存中…(img-et1zw5tb-1711627755405)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值