写点什么

如果你在中小厂,这些你一定要搞懂,分享一些行业经验

用户头像
Android架构
关注
发布于: 刚刚
  • 避免在 android 里面使用Enum

  • 减少 bitmap 的内存占用

  • inSampleSize:缩放比例,在把图片载入内存之前,我们需要先计算出一个合适的缩放比例,避免不必要的大图载入。

  • decode format:解码格式,选择 ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差异。

  • 减少资源图片的大小,过大的图片可以考虑分段加载

2、理解 Activity,View,Window 三者关系

这个问题真的很不好回答。所以这里先来个算是比较恰当的比喻来形容下它们的关系吧。Activity 像一个工匠(控制单元),Window 像窗户(承载模型),View 像窗花(显示视图)LayoutInflater像剪刀,Xml配置像窗花图纸。


  • Activity 构造的时候会初始化一个 Window,准确的说是PhoneWindow

  • 这个PhoneWindow有一个“ViewRoot”,这个“ViewRoot”是一个 View 或者说ViewGroup,是最初始的根视图。

  • ViewRoot通过addView方法来一个个的添加 View。比如TextView,Button 等

  • 这些 View 的事件监听,是由WindowManagerService来接受消息,并且回调 Activity 函数。比如onClickListeneronKeyDown等。

3、Handler 的原理

所以就有了 handler,它的作用就是实现线程之间的通信。


handler 整个流程中,主要有四个对象,handlerMessage,MessageQueue,Looper。当应用创建的时候,就会在主线程中创建 handler 对象,


我们通过要传送的消息保存到 Message 中,handler 通过调用sendMessage方法将 Message 发送到MessageQueue中,Looper对象就会不断的调用 loop()方法


不断的从MessageQueue中取出 Message 交给 handler 进行处理。从而实现线程之间的通信。

4、View,ViewGroup 事件分发
  1. Touch 事件分发中只有两个主角:ViewGroupViewViewGroup包含onInterceptTouchEventdispatchTouchEventonTouchEvent三个相关事件。View 包含dispatchTouchEventonTouchEvent两个相关事件。其中ViewGroup又继承于 View。


2.ViewGroup和 View 组成了一个树状结构,根节点为 Activity 内部包含的一个ViwGroup


3.触摸事件由 Action_Down、Action_Move、Aciton_UP 组成,其中一次完整的触摸事件中,Down 和 Up 都只有一个,Move 有若干个,可以为 0 个。


4.当Acitivty接收到 Touch 事件时,将遍历子 View 进行 Down 事件的分发。ViewGroup的遍历可以看成是递归的。分发的目的是为了找到真正要处理本次完整触摸事件的 View,这个 View 会在onTouchuEvent结果返回 true。


5.当某个子 View 返回 true 时,会中止 Down 事件的分发,同时在ViewGroup中记录该子 View。接下去的 Move 和 Up 事件将由该子 View 直接进行处理。


由于子 View 是保存在ViewGroup中的,多层ViewGroup的节点结构时,上级ViewGroup保存的会是真实处理事件的 View 所在的ViewGroup对象:如ViewGroup0-ViewGroup1-TextView的结构中,TextView返回了 true,它将被保存在ViewGroup1中,而ViewGroup1也会返回 true,被保存在ViewGroup0中。当 Move 和 UP 事件来时,会先从ViewGroup0传递至ViewGroup1,再由ViewGroup1传递至TextView


6.当ViewGroup中所有子 View 都不捕获 Down 事件时,将触发ViewGroup自身的onTouch事件。触发的方式是调用super.dispatchTouchEvent函数,即父类 View 的dispatchTouchEvent方法。在所有子 View 都不处理的情况下,触发AcitivityonTouchEvent方法。


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


7.onInterceptTouchEvent有两个作用:1.拦截 Down 事件的分发。2.中止 Up 和 Move 事件向目标 View 传递,使得目标 View 所在的ViewGroup捕获 Up 和 Move 事件。

5、onNewIntent()什么时候调用?(singleTask)
6、mvc?和?mvp mvvm


MCP.MVVM 项目实战代码.笔记


1.mvc:数据、View、Activity,View 将操作反馈给 Activity,Activitiy 去获取数据,数据通过观察者模式刷新给 View。循环依赖 Activity,很难单元测试 View 和 Model 耦合严重


2.mvp:数据、View、Presenter,View 将操作给 Presenter,Presenter 去获取数据,数据获取好了返回给 Presenter,Presenter 去刷新 View。PV,PM 双向依赖


3.mvvm:数据、View、ViewModel,View 将操作给 ViewModel,ViewModel 去获取数据,数据和界面绑定了,数据更新界面更新。


  • viewModel 的业务逻辑可以单独拿来测试

  • 一个 view?对应一个?viewModel?业务逻辑可以分离,不会出现全能类

  • 数据和界面绑定了,不用写垃圾代码,但是复用起来不舒服

7、自定义控件

View 的绘制流程:OnMeasure()——>OnLayout()——>OnDraw()

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
如果你在中小厂,这些你一定要搞懂,分享一些行业经验