Fragment思考

关于为什么setuservisiblehint会被废弃的原因思考:

这需要涉及到之前写过的一篇文章:性能优化:让ViewPager+Fragment模式更流畅

之前总结了几种情景实现Fragment的性能优化问题。
现在提出setuservisiblehint()所不能解决的问题:
下面这段引用摘自第一篇引用的文章。
但是,它说的其实还不全。
老一套的第一套方案:
1.如果我们不去考虑懒加载的情况。还是可以通过setUserVisibleHint来解决很多简单的Fragment显示隐藏的情况。特别是执行了

mViewPager.setOffscreenPageLimit(fragments.size());

这段代码之后。不再会执行fragment的相关生命周期方法的情况。setUserVisibleHint这个方法很多时候依旧是有很多妙用的。


现在说说不能解决的情况。

AndroidX的setMaxLifecycle()方法如果要真正用来做懒加载,依旧会避免不了至少一个会执行onResume()方法。可以解决的方法是对不显示的Fragment使用骨架屏的方式。
而setMaxLifecycle则可以通过配置最大允许的生命周期来限制Viewpager下的Fragment的OnResume()的执行。
核心代码:

 if (showPosition == index) {
      setMaxLifecycle(fragment, Lifecycle.State.RESUMED)
        } else {
            hide(fragment)
            setMaxLifecycle(fragment, Lifecycle.State.STARTED)
 }


	 //获取其中所有的fragment,其他的fragment进行隐藏
    val fragments = fragmentManager.fragments
    for (fragment in fragments) {
        if (fragment != showFragment) {
            hide(fragment)
            setMaxLifecycle(fragment, Lifecycle.State.STARTED)
        }
    }

两种方式的对比与总结
老一套的懒加载
优点:不用去控制 FragmentManager的 add+show+hide 方法,所有的懒加载都是在Fragment 内部控制,也就是控制 setUserVisibleHint + onHiddenChanged 这两个函数。
缺点:实际不可见的 Fragment,其 onResume 方法任然会被调用,这种反常规的逻辑,无法容忍。

新一套的懒加载(Androidx下setMaxLifecycle)
优点:在非特殊的情况下(缺点1),只有实际的可见 Fragment,其 onResume 方法才会被调用,这样才符合方法设计的初衷。
缺点:
对于 Fragment 的嵌套,及时使用了 setMaxLifecycle 方法。同级不可见的Fragment, 仍然要调用 onResume 方法。
需要在原有的 add+show+hide 方法中,继续调用 setMaxLifecycle 方法来控制Fragment 的最大生命状态

ref:

回答: 非常感谢您使用ChitGPT与我进行对话。关于您的问题,我理解您的意思是,如何使用生命周期模型开发交互式应用可能存在哪些问题。针对这个问题,我可以给您一些思考方向。 首先,我们可以考虑两个比较常见的生命周期模型,即“Activity生命周期”和“Fragment生命周期”。 对于Activity生命周期,我们知道它是由各种状态和回调方法组成的,包括onCreate、onStart、onResume、onPause、onStop、onDestroy等等。在开发交互式应用时,应该根据具体的业务需求和UI交互来合理地使用这些回调方法。然而,由于交互式应用的特殊性质,可能会存在以下问题: 1. 内存占用问题:交互式应用往往涉及到大量的数据和UI元素,如果在Activity中不恰当地存储这些数据,就可能导致内存消耗过大,从而影响用户体验。 2. 生命周期状态切换问题:交互式应用中,用户可能频繁地切换不同的页面或操作状态,这就需要在Activity的生命周期方法中处理好状态切换的逻辑,以确保应用能够正常运行,并且保证数据的完整性。 对于Fragment生命周期,它是一种用于管理的视图(UI组件)的状态和生命周期的机制,也包含各种状态和回调方法,如onCreateView、onResume、onPause、onDestroyView等等。如果在开发交互式应用时不理解和使用好这些生命周期方法,可能会导致以下问题: 1. 数据传递问题:Fragment和Activity之间的数据传递是交互式应用中的一个重要环节。如果不合理地使用Fragment的生命周期方法,可能会导致数据错误或传递不完整。 2. UI刷新问题:交互式应用需要及时地响应用户的操作,以保持界面的实时性。如果不适当地使用Fragment的生命周期方法来更新UI,可能会导致UI闪烁或延迟,影响用户的使用体验。 综上所述,在开发交互式应用时,我们需要深入理解和使用好Activity和Fragment的生命周期,避免在应用中出现数据、UI刷新等方面的问题,从而保证应用的高质量和用户的满意度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值