知识点

作者: 潇萧之炎 | 来源:发表于2022-02-10 10:39 被阅读0次

    一、View的绘制流程

    1.Activity的attach 方法里创建PhoneWindow。Activity的onCreate方法里的setContentView 会调用PhoneWindow的setContentView方法,创建DecorView并且把xml布局解析然后添加到DecorView中

    2.onResume方法执行后,会创建ViewRootImpl,它是最顶级的View,是DecorView的parent,创建之后会调用setView方法,setView方法里面会调用requestLayout,发起绘制请求。

    3.requestLayout 一旦发起,最终会调用performTraversals方法。其内部会调用performMeasure()、performLayout、performDraw()

    4.performMeasure()会调用最外层的ViewGroup的measure()–>onMeasure()。
    ViewGroup的onMeasure()是抽象方法,但其提供了measureChildren(),会遍历子View然后循环调用measureChild()
    这之中会用getChildMeasureSpec()+父View的MeasureSpec+子View的LayoutParam一起获取本View的MeasureSpec,
    然后调用子View的measure()到View的onMeasure()–>setMeasureDimension(getDefaultSize(),getDefaultSize()),getDefaultSize()默认返回measureSpec的测量数值,所以继承View进行自定义的wrap_content需要重写。

    5.performLayout()会调用最外层的ViewGroup的layout(l,t,r,b),本View在其中使用setFrame()设置本View的四个顶点位置。
    在onLayout(抽象方法)中确定子View的位置,如LinearLayout会遍历子View,循环调用setChildFrame()–>子View.layout()。

    6.performDraw()会调用最外层ViewGroup的draw():
    其中会先后调用background.draw()(绘制背景)、onDraw()(绘制自己)、dispatchDraw()(绘制子View)、onDrawScrollBars()(绘制装饰)。

    总结UI原理和高级的UI优化方式 - 掘金 (juejin.cn)

    二、事件分发机制;

    https://www.jianshu.com/p/38015afcdb58 Android事件分发机制详解:史上最全面、最易懂

    三、LeckCanery

    内存泄漏检测之LeakCanary源码导读与解析 - 简书 (jianshu.com)
    每日一问:说说你对 LeakCanary 的了解 - 简书 (jianshu.com)

    qq.png
    1. 原理总结
      application启动时,通过application实例监听Activity和fragment生命周期。
      在生命周期结束后,主线程空闲时,再延时开始检测泄漏。
      尝试两次回收,再判断实例是否存在,若存在则判定泄漏。
      使用android.os.Debug包获取.hprof数据。
      使用haha库分析并精简泄漏信息,排除特例后保存泄漏信息。

    四、Activity启动

    Activity启动流程_进程 (sohu.com)
    https://blog.csdn.net/u012267215/article/details/91406211
    https://www.jianshu.com/p/9ecea420eb52

    五、单例模式

    单例模式 - 简书 (jianshu.com)

    六、组件化

    全面掌握Android组件化,年后去虐面试官! - 知乎 (zhihu.com)
    页面跳转

    1. 方案—ARouter

    组件间通信

    1. 服务暴露组件
    2. EventBus(注意Event实体类要定义在export_xxx中)。

    七、题目

    1. h5和native通信的几种方式

    2. okktt如果想重试的化,怎么操作
      retrofit原理

    3. handler原理,post(1)和post(3)是如何实现的。
      for循环底层原理

    4. 内存泄漏,leckcanery原理。crash如何防止
      四大引用

    5. getMeasuredHeight和getHeight

    6. 热修复和插件化的原理, 类加载的原理

    7. 同步 Java中实现异步的几种方式

    8.手写LRUcache

    1. activity的启动模式

    2. mvvm架构mvp

    相关文章

      网友评论

          本文标题:知识点

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