知识点

一、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

你可能感兴趣的:(知识点)