4.8号晚上8点多接到了阿里一面的电话,面试官人很好,和我聊了半个多小时。我面的是无线事业部,就是做淘宝客户端的那个部门。面试问的都很基础,刚开始问了hashmap和快速排序。接着就是问Android相关的问题。因为数据结构和算法是基础,这里就不多说了,主要写一下与Android相关的问题。
首先问了一个Android中事件分发的问题,如下图:
一个LinerLayout里放一个Button,当点击Button的时候事件是怎么传递的?
点击事件用MotionEvent来表示,当点击事件发生时,最先传递给Activity,用Activity的dispatchTouchEvent来进行事件的派发,具体的工作是用Activity内部的Window来完成的。Window将事件传递个decor view,decor view一般是当前几面的底层容器(setContentView所设置的View的父容器,decor view是一个FrameLayout),通过Activity.getWindow().getDecorView()可以获得。现在,事件传递到decorView了,decorView再将事件传递给LinerLayout,LinerLayout将事件传递给Button。
这里要补充的是:当父容器通过 dispatchTouchEvent来传递事件时,如果他的onInterceptTouchEvent函数返回true,就不会将事件传递个子view,当然Android的还提供了一种防止父容器阻断事件的机制:只要子View调用requestDisallowInterceptTouchEvent方法,就能保证子View一定能收到点击事件。
关于事件的派发可以看一下我的另一篇博客Android滑动事件冲突。
接着面试官又问了Button中调用setOnclickedListener和在onTouchEvent中处理点击事件的区别,这个我觉的很简单,就说都差不多,setOnclickedListener重点onClick就是Android在onTouchEvent中完成的。
这个问题不懂面试官想问什么,欢迎大家评论,告诉我一下,谢谢 :)
还问了一个关于HTTP返回码的问题:你知道HTTP返回码代表什么吗?
1×× 保留
2×× 表示请求成功地接收
3×× 重定向
4×× 客户错误
5×× 服务器错误
最后,问了一个Android中动态加载SDK的问题,面试官给我提示了几个参数,可这个我之前没做过,完全不懂。
问题描述:现在要动态加载仓库中的两个SDK,但这两个SDK中都调用了同一个jar吧,怎么解决这个冲突?
希望懂的朋友能评论一下,:)