开头有话说
面试不刷题,相当于不穿铠甲上战场,这心里,慌得很!
不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊~
而我们很多人,一心刷那个高级面试题上,最后却倒在了基础题上,实在可惜。
今天就给大家带来几道简单的面试题,来测试一下自己有没有大意!
一,view的事件分发机制
dispatchTouchEvent 分发事件
onInterceptTouchEvent 拦截事件只有viewgroup才有,view和activity没
onTouchEvent 处理点击事件
- 1,图解ACTION_DOWN 事件分发,如果面试的时候能把下面的图画出来。能增分不少dispatchTouchEvent和 onTouchEvent的框里有个【true---->消费】的字,表示的意思是如果方法返回true,那么代表事件就此消费,不会继续往别的地方传了,事件终止
- 2,红色的箭头代表ACTION_DOWN 事件的流向,蓝色的箭头代表ACTION_MOVE 和 ACTION_UP 事件的流向
二,Handler原理机制
Handler主要负责发送和接受消息,Looper负责不断轮询MessageQueue,有新的消息就交给Handler处理,如果轮询不到新的消息,那就自身就处于阻塞状态。
Handler简单图解
Handler铁三角
1.Handler android的消息机制就是指Handler机制,Handler机制的运行需要MeeageQueue和Looper的辅助。
λ MessageQueue:消息队列,用于将所有收到的消息以队列的形式进行排列,并提供入队和出队的方法。在looper的构造函数中创建,因此一个Looper也就对应了一个MessageQueue.
通过enqueueMessage实现消息的入队,通过next方法实现出队
2.Looper 轮询器 作用:与当前线程绑定,保证一个线程只会有一个Looper实例,同时一个Looper实例也只有一个- MessageQueue。Looper 通过loop()方法调用messagequeue的next方法,不断从 MessageQueue中去取消息
详解单个handler原理
图解多个handler原理
Handler的创建流程
- 1、首先Looper.prepare()在本线程中保存一个Looper实例,然后该实例中保存一个MessageQueue对象;因为Looper.prepare()在一个线程中只能调用一次,所以MessageQueue在一个线程中只会存在一个。
- 2、Looper.loop()会让当前线程进入一个无限循环,不端从MessageQueue的实例中读取消息,然后回调msg.target.dispatchMessage(msg)方法。
- 3、Handler的构造方法,会首先得到当前线程中保存的Looper实例,进而与Looper实例中的MessageQueue想关联。
- 4、Handler的sendMessage方法,会给msg的target赋值为handler自身,然后加入MessageQueue中。
- 5、在构造Handler实例时,我们会重写handleMessage方法,也就是msg.target.dispatchMessage(msg)最终调用的方法。
好了,总结完成,大家可能还会问,那么在Activity中,我们并没有显示的调用Looper.prepare()和Looper.loop()方法,为啥Handler可以成功创建呢,这是因为在Activity的启动代码中,已经在当前UI线程调用了Looper.prepare()和Looper.loop()方法。
三,mvc,mvp,mvvm
三个架构模式:
- MVC:Model-View-Controller,经典模式,很容易理解,主要缺点有两个:
1,View对Model的依赖,会导致View也包含了业务逻辑;
2,Controller会变得很厚很复杂。
- MVP:Model-View-Presenter,MVC的一个演变模式,将Controller换成了Presenter, 主要为了解决上述第一个缺点,将View和Model解耦,
不过第二个缺点依然没有解决。
- MVVM:Model-View-ViewModel,是对MVP的一个优化模式,
采用了双向绑定:View的变动,自动反映在ViewModel,反之亦然。
MVC, MVP, MMVM用来解决业务逻辑和视图之间的耦合
Mvc和mvp的最主要区别:
Mvc中model可以直接和view交互
mvp中model 与view 的交互由presenter完成
最后
篇幅有限,就放出来几道题来可以大家测试一下,更多的面试题目,我已经整理好成PDF大全,可以分享给大家。
这份Android学习PDF大全真的包含了方方面面了,内含Java基础知识点、Android基础、Android进阶延伸、算法合集等等
我的这份学习PDF,可以有效的帮助大家掌握知识点。
总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习
关注我看个人介绍,或直接 点击我免费领取
分享不易,不点赞+关注支持一下嘛?
网友评论