阿里、腾讯、百度、华为、京东、搜狗和滴滴最新面试题汇集
原文链接 程序员小乐
以下是(2016、2017 、阿里、腾讯、百度、华为、京东、搜狗和滴滴面试题汇集)
Android基础
1、什么是ANR 如何避免它?
ANR 就是一个无响应的对话框,主要原因就是在主线程做了耗时操作。
全称为Application Not Responding。在Android 中,如果你的应用程序有一段时间没有响应,系统会向用户显示一个对话框,这个对话框称作应用程序无响应对话框。
不同的组件发生ANR 的时间不一样,
- 主线程(Activity)是5 秒;
- BroadCastReceiver 是10 秒;
- Service:20 秒(均为前台),Service 在20 秒内无法处理完成。
解决方案:
- 将所有耗时操作,比如访问网络,Socket 通信,查询大量SQL 语句,复杂逻辑计算等都放在子线程中去,然后通过handler.sendMessage、runonUITread、AsyncTask 等方式更新UI,以确保用户界面操作的流畅度.
- 如果耗时操作需要让用户等待,那么可以在界面上显示进度条。
- 避免在activity里面做耗时操作,oncreate & onresume
- 避免在onReceiver里面做过多操作
- 避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。
2、View的绘制流程;自定义View如何考虑机型适配;自定义View的事件
View的绘制流程:OnMeasure()——>OnLayout()——>OnDraw()
组合控件、继承原有的控件、继承原有的控件
- 第一步:OnMeasure():测量视图大小。从顶层父View到子View递归调用measure方法,measure方法又回调OnMeasure。
- 第二步:OnLayout():确定View位置,进行页面布局。从顶层父View向子View的递归调用view.layout方法的过程,即父View根据上一步measure子View所得到的布局大小和布局参数,将子View放在合适的位置上。
- 第三步:OnDraw():绘制视图。ViewRoot创建一个Canvas对象,然后调用OnDraw()。六个步骤:绘制视图的背景、保存画布的图层(Layer)、绘制View的内容、绘制View子视图、还原图层(Layer)、绘制滚动条(如果没有就不用);
3、分发机制;View和ViewGroup分别有哪些事件分发相关的回调方法;自定义View如何提供获取View属性的接口;
基本会遵从 Activity => ViewGroup => View 的顺序进行事件分发,然后通过调用 onTouchEvent() 方法进行事件的处理。我们在项目中一般会对 MotionEvent.ACTION_DOWN,MotionEvent.ACTION_UP,MotionEvent.ACTION_MOVE,MotionEvent.ACTION_CANCEL 分情况进行操作。