Android学习

Android 问题总结

2020-07-28  本文已影响0人  厚积方能薄发

1、事件分发机制

L1:

首先事件的分发是从上级一层层往下级传递,设定一个场景,Activity上有ViewGroup,而ViewGroup中有View,分发的过程分别是从Activity分发到ViewGroup再到View。
说到事件分发,涉及到3个方法,分别是dispatchTouchEvent interceptTouchEvent onTouchEvent,interceptTouchEvent 只有ViewGroup有,它负责拦截事件的传递,如果它决定拦截,那么消息不会向下传递。

L2:

了解事件分发机制,首先得知道事件作用在什么上,事件会作用Activity、ViewGroup、View,而它们三者拥有不同的事件分发机制:
Activity事件分发机制:
当一个点击事件发生时,最先到达的是Activity的dispatchTouchEvent。分析其源码:

if (event.getAction == MotionEvent.ACTION_DOWN) {
        onUserInteraction();
}
if (getWindow.superDispatchTouchEvent()) {
        return true;
}
return onTouchEvent(event);

在onTouchEvent中判断点击事件是否在window的边界外,如果在边界外,返回true,掉费掉事件,如果不在边界外,返回false。

ViewGroup:
事件从Activity传递过来,先调用dispatchTouchEvent,在其内部会判断是否进行拦截,如果拦截,自己来消费掉事件(onTouch、onTouchEvent、performClick、onClick),如果不拦截,则在其内部找到被点击的子控件,调用子控件的dispatchTouchEvent。
View:
事件从ViewGroup传递过来,先调用dispatchTouchEvent,在设置onTouch的情况下,并且enable为true,并且onTouch返回true时,将不会执行onTouchEvent,在上面任何条件不成立的情况下都会执行onTouchEvent。在onTouchEvent中,只要View可点击就一定会返回true,若控件不可点击就一定会返回false。

2、Handler 原理

L1:

首先Handler的作用是线程间通信,为什么要用Handler呢,因为在子线程中是不允许操作UI的,我们平常一般会将耗时操作放到子线程中,而当子线程执行完最后需要更新UI的时候,需要借助Handler通知主线程更新UI。

L2:

而说到Handler机制,涉及到三个概念,Handler、Looper、MessageQueue,handler将消息发送到消息队列,而Looper充当一个泵的角色,它以一个死循环的方式,一直在等待消息的到来,一有消息来的时候,它就进行一个统一的调度,然后将消息返还给handler处理,只有经过它的允许的消息才可以执行更新UI的操作。

3、Context

可以理解为场景,也就是用户与操作系统操作的过程,比如你打电话,场景包括电话程序对应的界面,以及隐藏在背后的数据。

在这里插入图片描述

4、RecyclerView与ListView的对比

优点:

缺点:

5、简述对Kotlin的认识

6、广播和EventBus的对比

广播的优点:

广播的缺点:

EventBus优点:

EventBus缺点:

7、Activity 启动模式

standard

singleTop

singleTask

singleInstance

8、2个 Activity 之间传递对象有哪向种方法,有什么区别

bundle.putSerializable
使用 I/O 读写存储在硬盘上,性能稍差,但代码简单。

bundle.putParcelable
直接在内存中读写,性能好,但需要写很多额外代码。

9、Activity、View、Window 之间的关系

每个 Activity 包含了一个 Window 对象,这个对象是由 PhoneWindow 做的实现。而 PhoneWindow 将 DecorView 作为了一个应用窗口的根 View,这个 DecorView 又把屏幕划分为了两个区域:一个是 TitleView,一个是 ContentView,而我们平时在 Xml 文件中写的布局正好是展示在 ContentView 中的。

参考

上一篇下一篇

猜你喜欢

热点阅读