[关闭]
@Bitliker 2019-03-09T15:22:17.000000Z 字数 1851 阅读 679

面试问题

职业


自定义View绘制流程

  1. xml创建自定义属性表;
  2. 初始化方法获取转入属性
  3. 测量:onMeasure()决定View的大小;
    3.1 MeasureSpec获取当前控件的设置和大小 getMode(EXACTLY :match_parent,AT_MOST:AT_MOST UNSPECIFIED:) getSize
  4. 布局:onLayout()决定View在ViewGroup中的位置(遍历子控件,为子控件设置坐标child.layout(左,上,右,下))
  5. 绘制:onDraw()决定绘制这个View。canvas 绘制
  6. Scroller 平滑滑动

事件分发机制

  1. dispatchTouchEvent 负责分发,如果返回ture,中断,不再分发
  2. Activity->ViewGroup->View
  3. RecyclerView ItemTouch和item View点击事件

消息分发机制

  1. Looper、handler、
  2. 在非主线程中直接new Handler():非主线程没有默认没有创建Looper对象

OOM处理

  1. Bitmap处理
    2.1 采用低内存占用量的编码方式(Bitmap.Config.ARGB_4444)
    2.2 图片压缩BitmapFactory.Options通过inSampleSize设置缩放倍数
    2.3 及时回收图像
    2.4 LruCache + sd

  2. 借助Android studio 内存分析工具,查看内存使用情况,定位到内存泄漏的类(一般是执有强引用无法回收)

  3. facebook开源库工具,查看内存泄漏的类

Android新特性

  1. Android 9.0 所有请求使用https,可以使用多摄像头API同时访问来自2个物理摄像头的流,后台应用程序无法访问相机和麦克风
  2. Android 8.0 画中画,自适应图标,快捷方式(无用)
  3. 7.0 通知,分屏,私有目录被限制访问
  4. 6.0 动态权限

线程

  1. 状态:就绪,执行,阻塞
  2. 断点下载(下载时候获取到文件的大小length,在头文件中添加("RANGE", "bytes=" + startPosition + "-"))
  3. 原子操作实现线程安全原理
  4. sleep和wait
    4.1 sleep是让线程休眠,到时间后会继续执行,wait是等待,需要唤醒再继续执行
    4.2 sleep是Thread线程类的方法,而wait是Object顶级类的方法
    4.3 sleep可以在任何地方使用,而wait只能在同步方法或者同步块中使用

Activity的四种启动模式

  1. Standard
  2. SingeTop,位于栈顶就复用,否则创建
  3. SingleTask,服用栈中实例,在该实例之上的所有activity都依次进行出栈操作
  4. SingleInstance 存放在单独的任务栈,不影响app别的activity

四大组件

  1. Activity相互调用时候
    1.1 A的onPause()方法被执行。
    1.2 B的onCreate()方法,onStart(),onResume()方法被顺序执行。
    1.3 如果B是不透明的,A将会完全被隐藏,此时A完全不可见,A的onStop()方法就会被执行。
  2. Service生命周期
    2.1 onCreat() //创建
    2.2 onStartCommand() /start方式调用
    2.3 Bind() //bind方式启动
    2.4 onUnbind()
    2.5 onDestroy() 用户可见
    2.6 ServiceConnection

Fragment

  1. onAttach() //创建
  2. onCreate()
  3. onCreateView()
  4. onActivityCreated()
  5. onStart() 用户可见
  6. onResume()
  7. onPause() //后台模式
  8. onStop()
  9. onDestroyView()
  10. onDestroy()
  11. onDetach()
  12. ViewPager

跨进程通讯

  1. Bundle/Intent传递数据
  2. AIDL
  3. ContentProvider
  4. Socket

多进程引发的问题

  1. 静态成员和单例失效:每个进程保持各自的静态成员和单例,相互独立
  2. 线程同步机制失效:每个进程有自己的线程锁

跨进程通信

  1. startActivity
  2. Content Provider 内容提供者
  3. 广播
  4. AIDL Service

android中的动画

  1. 帧动画
  2. 属性动画

WebSocket

设计模式

  1. 适配器模式,ListView Adapter
  2. 建造者模式
  3. 观察者模式 Rxjava
  4. 代理模式 Activity A去绑定一个Service S,Binder机制就起到了代理的作用
  5. 调解者模式 一个对象的某个操作需要调用N个对象的M个方法来完成时,把这些调用过程封装起来,就成了一个调解者

xmpp

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注