1.. 自定义View流程
onMeasure, onLayout, onDraw, 采用深度优先,因为必须子view获得测量结果,父view才能确定大小;
2.. 事件分发机制
https://www.cnblogs.com/aademeng/articles/6551337.html
ViewGroup:
boolean dispatchTouchEvent(){
if(onInterceptTouchEvent() && onTouchEvent()){
return true;
}else{
return child.dispatchTouchEvent();
}
}
View:(View如果有OnTouch则先执行且返回true,则被OnTouch消费;否则如果返回false,则看是否可点击,可以点击的话,一定消费,至于是否是onClick消费看是否设置了OnClickListener,没有的话,就是一个没有反应的点击事件;如果不可点击,则view不消费此事件)
boolean dispatchTouchEvent(){
if(OnTouchListener() && OnTouch())
return true;
else if(clickable()){
onClick();
return true;
}else
return false;
}
一个事件系列(即DOWN–>MOVE…MOVE–>UP),如果一旦一个view接受处理此事件,那么事件系列后续事件直接给它,不必再次调用onInterceptTouchEvent.
如果所有元素都不处理这个事件,那么这个事件最终会交给Activity去处理,就是Activity的OnTouchEvent方法会被调用
Activity.java
/**
* Called when a touch screen event was not handled by any of the views
* under it. This is most useful to process touch events that happen
* outside of your window bounds, where there is no view to receive it.
*
* @param event The touch screen event being processed.
*
* @return Return true if you have consumed the event, false if you haven’t.
* The default implementation always returns false.
*/
public boolean onTouchEvent(MotionEvent event) {
if (mWindow.shouldCloseOnTouch(this, event)) {
finish();
return true;
}
return false;
}
3.. Service启动模式(startService bindService)
4.. Activity的启动模式(standard, singleTop, singleTask(Home页面常使用), singleInstance )
5.. Android 动画有哪几种?区别?
1). 帧动画: 大量图片播放,耗内存,容易OOM
2). 补间动画(Tween动画或者View动画):并未真正改变位置
3). 属性动画 :真正改变位置
6.. handler, Looper,MessageQueue, Message之间的关系
7.. 性能优化有哪些方面可以提高性能的
View方面:
布局减少嵌套, 多使用Drawable, Include, Merge, ViewStub,
懒加载
中间:
耗时任务放入子线程, 多线程并发的情况用线程池
底层:
DB的大量访问改为事务处理
大量HTTP download改为一次性
8.. 如何诊断性能问题(log, TraceView, MAT)
9.. MVP框架的理解
10.. 多组件开发 和 插件化开发 的理解
11.. 热修复框架,原理?(AndFix, QZone …)
12.. 自动化测试框架(JUnit, Espresso)
13.. 项目中遇到的最难的问题是什么?如何解决的?
1). 有页面加载时间过长,32s,log发现后台执行时间28s,原因for循环里查询数据库组装数据json,解决办法:一次性查出所有数据,在内存中操作拼接;->减少至4s;然后把download数据的http接口全部放入一个里面,减少网络访问次数,保存本地DB事务一次性完成,大大提高性能速度,秒进。
2). 滑动冲突:嵌套滑动的view,解决办法:外部拦截 + 内部拦截
3). 曲