@Bitliker
2019-03-09T15:22:17.000000Z
字数 1851
阅读 679
面试问题
职业
自定义View绘制流程
- xml创建自定义属性表;
- 初始化方法获取转入属性
- 测量:onMeasure()决定View的大小;
3.1 MeasureSpec获取当前控件的设置和大小 getMode(EXACTLY :match_parent,AT_MOST:AT_MOST UNSPECIFIED:) getSize
- 布局:onLayout()决定View在ViewGroup中的位置(遍历子控件,为子控件设置坐标child.layout(左,上,右,下))
- 绘制:onDraw()决定绘制这个View。canvas 绘制
- Scroller 平滑滑动
事件分发机制
- dispatchTouchEvent 负责分发,如果返回ture,中断,不再分发
- Activity->ViewGroup->View
- RecyclerView ItemTouch和item View点击事件
消息分发机制
- Looper、handler、
- 在非主线程中直接new Handler():非主线程没有默认没有创建Looper对象
OOM处理
Bitmap处理
2.1 采用低内存占用量的编码方式(Bitmap.Config.ARGB_4444)
2.2 图片压缩BitmapFactory.Options通过inSampleSize设置缩放倍数
2.3 及时回收图像
2.4 LruCache + sd
借助Android studio 内存分析工具,查看内存使用情况,定位到内存泄漏的类(一般是执有强引用无法回收)
- facebook开源库工具,查看内存泄漏的类
Android新特性
- Android 9.0 所有请求使用https,可以使用多摄像头API同时访问来自2个物理摄像头的流,后台应用程序无法访问相机和麦克风
- Android 8.0 画中画,自适应图标,快捷方式(无用)
- 7.0 通知,分屏,私有目录被限制访问
- 6.0 动态权限
线程
- 状态:就绪,执行,阻塞
- 断点下载(下载时候获取到文件的大小length,在头文件中添加("RANGE", "bytes=" + startPosition + "-"))
- 原子操作实现线程安全原理
- sleep和wait
4.1 sleep是让线程休眠,到时间后会继续执行,wait是等待,需要唤醒再继续执行
4.2 sleep是Thread线程类的方法,而wait是Object顶级类的方法
4.3 sleep可以在任何地方使用,而wait只能在同步方法或者同步块中使用
Activity的四种启动模式
- Standard
- SingeTop,位于栈顶就复用,否则创建
- SingleTask,服用栈中实例,在该实例之上的所有activity都依次进行出栈操作
- SingleInstance 存放在单独的任务栈,不影响app别的activity
四大组件
- Activity相互调用时候
1.1 A的onPause()方法被执行。
1.2 B的onCreate()方法,onStart(),onResume()方法被顺序执行。
1.3 如果B是不透明的,A将会完全被隐藏,此时A完全不可见,A的onStop()方法就会被执行。
- Service生命周期
2.1 onCreat() //创建
2.2 onStartCommand() /start方式调用
2.3 Bind() //bind方式启动
2.4 onUnbind()
2.5 onDestroy() 用户可见
2.6 ServiceConnection
Fragment
- onAttach() //创建
- onCreate()
- onCreateView()
- onActivityCreated()
- onStart() 用户可见
- onResume()
- onPause() //后台模式
- onStop()
- onDestroyView()
- onDestroy()
- onDetach()
- ViewPager
跨进程通讯
- Bundle/Intent传递数据
- AIDL
- ContentProvider
- Socket
多进程引发的问题
- 静态成员和单例失效:每个进程保持各自的静态成员和单例,相互独立
- 线程同步机制失效:每个进程有自己的线程锁
跨进程通信
- startActivity
- Content Provider 内容提供者
- 广播
- AIDL Service
android中的动画
- 帧动画
- 属性动画
WebSocket
设计模式
- 适配器模式,ListView Adapter
- 建造者模式
- 观察者模式 Rxjava
- 代理模式 Activity A去绑定一个Service S,Binder机制就起到了代理的作用
- 调解者模式 一个对象的某个操作需要调用N个对象的M个方法来完成时,把这些调用过程封装起来,就成了一个调解者
xmpp