美文网首页Android技术知识Android开发Android开发
03 RecycleView源码解析与性能优化

03 RecycleView源码解析与性能优化

作者: 凤邪摩羯 | 来源:发表于2020-11-10 09:18 被阅读0次

    1 RecyclerView绘制流程

    https://www.jianshu.com/p/c52b947fe064

    2 复用(缓存)机制

    image.png

    2.1 四级缓存:

    第一级:mChangedScrap 与 mAttachedScrap ---> 回收:recycler.scrapView(view);
    第二级:mCachedViews--->默认大小为2---> 回收:recycler.recycleViewHolderInternal()
    第三级:mViewCacheExtension
    第四级:RecycledViewPool ---> 默认大小5(不同的ViewType都会有5个)--->5n+2

    2.2 onLayout

    • dispatchLayoutStep1
    1. Adapter的更新;
    2. 决定该启动哪种动画;
    3. 保存当前View的信息(getLeft(), getRight(), getTop(), getBottom()等);
    4. 如果有必要,先跑一次布局并将信息保存下来。
    • dispatchLayoutStep2 (真正对子View做布局的地方)
    1. 计算锚点,以锚点开始填充RecyclerView(其实就是执行fill方法)。
    2. 执行fill方法,判断RecyclerView是否还有空间,如果有,执行layoutChunk方法,直至填充满。
    3. layoutChunk方法中,寻找到当前要添加的子view,add到RecyclerView中。
    4. 对子view进行measure和layout。
    • dispatchLayoutStep3

    为动画保存View的相关信息; 触发动画; 相应的清理工作。 其实dispatchLayoutStep3()就是做了一些收尾工作,将一些变量重置,处理下动画。

    • mState.mLayoutStep
    • 初始化为STEP_START
    • 执行完dispatchLayoutStep1后,mState.mLayoutStep = State.STEP_LAYOUT;
    • 执行完dispatchLayoutStep2后,mState.mLayoutStep = State.STEP_ANIMATIONS;
    • 执行完dispatchLayoutStep3后,mState.mLayoutStep = State.STEP_START;

    2.3 优缺点

    image.png

    2.4 参考

    https://www.jianshu.com/p/e44961f8add5

    https://www.jianshu.com/p/efe81969f69d

    https://www.jianshu.com/p/6b0c66d30d8e

    3 回收机制

    image.png

    4 进阶优化和使用

    https://www.jianshu.com/p/52791ac320f6

    5 参考

    https://www.jianshu.com/p/61fe3f3bb7ec
    https://www.jianshu.com/p/c89c99736c05
    https://www.jianshu.com/p/efe81969f69d
    https://www.jianshu.com/p/65523b2ce15b
    https://www.jianshu.com/p/bdd9f4bdd90a
    https://www.jianshu.com/p/3a0d0ce4e649
    https://www.jianshu.com/p/af91949db629
    https://www.jianshu.com/p/3d52c5ede093
    https://www.jianshu.com/p/20851e4e32a7
    https://www.jianshu.com/p/c769f4ed298f
    https://www.jianshu.com/p/b7ac36190e2c
    https://www.jianshu.com/p/abedfa1d6dd1
    https://www.jianshu.com/p/70c5d3f0bb34

    相关文章

      网友评论

        本文标题:03 RecycleView源码解析与性能优化

        本文链接:https://www.haomeiwen.com/subject/iyswyktx.html