Android专家级别的面试总结

本文总结了Android专家级别的面试要点,包括自定义View流程、事件分发机制、Service启动模式、Activity启动模式、动画种类、性能优化策略、框架理解、多组件与插件化开发、热修复原理、自动化测试框架等。深入探讨了各种技术细节,如布局优化、多线程处理、内存管理、设计模式、算法理解等,并给出了实际问题的解决方案。
摘要由CSDN通过智能技术生成

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). 曲

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值