一.谈谈fianl,finally,finalize,有什么不同?
1.final可以用来修饰类,方法,变量,分别有不同的意义,final修饰class代表不可以继承扩展,final的变量是不可以修改的,而final的方法也是可以重写的(override).
2.finally则是java保证重点代码一定要背执行的一种机制。我们可以使用try-finally或try-catch-finally来进行类似关闭JDBC连接,保证unlock锁等动作。
3.finalize 是基础类 java.lang.Object 的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize 机制现在已经不推荐使用,并且在 JDK 9 开始被标记为 deprecated。
二.为什么 Android 要采用 Binder 作为 IPC 机制?
1. 管道:在创建时分配一个page大小的内存,缓存区大小比较有限;
2. 消息队列:信息复制两次,额外的CPU消耗;不合适频繁或信息量大的通信;
3. 共享内存:无须复制,共享缓冲区直接付附加到进程虚拟地址空间,速度快;但进程间的同步问题操作系统无法实现,必须各进程利用同步工具解决;
4. 套接字:作为更通用的接口,传输效率低,主要用于不通机器或跨网络的通信;
5. 信号量:常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
6. 信号: 不适用于信息交换,更适用于进程中断控制,比如非法内存访问,杀死某个进程等;
三.Butterknife。
1.处理View绑定和click事件处理功能,简化代码,提升开发效率
2.方便处理Adapter里面的ViewHolder绑定问题,运行时不会影响效率,使用配置方便,代码清晰,可读性强。
四.ArrayList和LinkedList的大致区别
1.ArrayList是实现基于动态数组的数据结构,LinkedList基于链表的数据结构
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针
3.对于新增和删除add和remove,LinedList比较占优,因为ArrayList要移动数据
五.View的绘制流程:OnMeasure()—>OnLayout()—>OnDraw()
1.OnMeasure():测量试图大小。从顶层父View到子View递归调用measure方法,measure方法又回调OnMeasure()。
2.OnLayout():确定View位置,进行页面布局。从顶层父View向子View的递 归调用view.layout方法的过程,即父View根据上一步measure子View所得到 的布局大小和布局参数,将子View放在合适的位置上。
3.OnDraw():绘制视图。ViewRoot创建一个Canvas对象,然后调用 OnDraw()。六个步骤:①、绘制视图的背景;②、保存画布的图层 (Layer);③、绘制View的内容;④、绘制View子视图,如果没有就不 用;⑤、还原图层(Layer);⑥、绘制滚动条。
六.View,ViewGroup事件分发
1. Touch事件分发中只有两个主角:ViewGroup和View。ViewGroup包含onInterceptTouchEvent、dispatchTouchEvent、onTouchEvent三个相关事件。View包含dispatchTouchEvent、onTouchEvent两个相关事件。其中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都不处理的情况下,触发Acitivity的onTouchEvent方法。
7.onInterceptTouchEvent有两个作用:1.拦截Down事件的分发。2.中止Up和Move事件向目标View传递,使得目标View所在的ViewGroup捕获Up和Move事件。
七.java提高篇之理解java的三大特性
1.封装:隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。
2.继承:是为了重用父类代码。两个类若存在IS-A的关系就可以使用继承,同时继承也为实现多态做了铺垫,那么什么是多态呢?多态的实现机制又是什么呢?请看我一一为你揭开: