day 14-15 面试题:Binder机制、动画机制

面试题:

1. 什么是Binder,用来干什么?讲讲Binder的机制?   
2. 动画机制
	1.Android中的动画分为哪些种类 & 特点 & 缺点。
	2.知道SVG & 矢量动画吗?
	3.给我说说转场动画。
	4.给我谈谈插值器 & 估值器 的作用。
	5.说说Android动画框架实现的原理。   

1. Binder的机制

1.1 什么是Binder,用来做什么?

  1. 什么是Binder

    Binder是Android的一个类,实现了IBinder接口。从IPC角度来讲,Binder是Android中的一种跨进程通信方式。

  2. Binder用来干什么?

    在Android开发中,Binder主要用在Service中,包括AIDL和Messenger。

  3. 使用Binder进行进程间通信有什么好处

    1. 性能:Binder数据拷贝只需要一次,而管道、消息队列、Socket都需要两次,共享内存方式虽然不需要拷贝,但实现方式非常复杂。
    2. 安全:Binder机制从协议本身就支持对通信双方做身份校验,相较传统的IPC通信方式安全性会提升很多。

1.2 Binder机制

Binder基于Client-Server的通信模式,总共有4个角色。

  • Client进程:调用端
  • Server进程:提供服务的进程
  • ServiceManager:Server需要注册到Manager,Client可以从Manager中获取Server的代理。
  • Binder驱动:驱动负责进程间通信的建立,数据包在进程之间的传递及交互等一系列操作。

一个完整的Binder通信流程:

  1. Client通过ServiceManager获取服务端的BinderProxy代理对象
  2. 调用BinderProxy将参数、方法标识等传给ServiceManager
  3. Client线程进入等待状态
  4. ServiceManager将用户空间的参数等请求数据复制到内核空间,并向Server插入一条执行方法的事务
  5. 事务执行完成通知ServiceManager,ServiceManager将执行结果从内核空间复制到用户空间
  6. 唤醒等待的线程,响应结果

2. 动画机制

2.1 Android中的动画分为哪些种类 & 特点 & 缺点

  1. View动画
    view的真正位置并不会跟随动画移动。可以单独或者组合使用平移、旋转、缩放、透明等动画效果。
  2. 帧动画
    多张不同的图片,通过帧动画拼接起来播放,即可实现动画效果,一些相对比较复杂难以实现的效果通过它来实现,使用场景比较少。
  3. 属性动画
    属性动画可以实现View动画的所有效果,并且View的真正位置是跟着动画一起动的,点击事件及触摸事件可以在动画过程中执行。属性动画可以动态改变添加了getter和setter的View的属性,从而改变View的绘制效果。
  4. 触摸反馈动画(Ripple Effect)
    这是一种点击效果,设置上之后,点击控件后会产生涟漪效果
  5. 转场动画和共享元素
    一般用在页面跳转时作为转场动画使用。
  6. 矢量图动画(Vector动画)
    使用使用这个网址的工具将普通的图片转换为Vector文件 ,如果有需要动态转换效果的图标或者需要特定效果的VectorDrawable图片会用到矢量图动画

2.2 知道SVG & 矢量动画吗?

  1. SVG
    知道,SVG是通过XML文件中的一系列点、线,曲线和相关颜色组成的矢量图,放大不会失真,文件比图片小,能够通过控制path,写出丰富的动画效果。5.0以下需要引入兼容包才能支持。
  2. 矢量动画
    使用AnimatedVectorDrawableCompat可以将动画属性添加到矢量图中,图片可以添加平移、缩放、旋转、透明等效果,path可以设置移动路径、填充颜色,描边宽度、颜色,透明度等等组合成复杂的动画效果。

2.3 给我说说转场动画

转场动画参考链接

Android 5.0之前支持Activity转场动画,分别在startActivity()和finish()调用的地方手动调用overridePendingTransition(in,out)指定进入和退出页面的动画效果。

Android5.0之后,启动Activity时,可以调用ActivityOptionsCompat的不同方法实现转场和共享元素过渡的效果。

2.4 给我谈谈插值器 & 估值器 的作用

插值器(Interpolator):主要是控制动画的速度,主要包含:匀减速、匀加速、先加速后减速,先减速后加速、匀速等。

估值器(TypeEvaluator):控制属性从动画初始值到结束值中间的数值的具体变化值。比如,定义加速动画的加速度值。

2.5 说说Android动画框架实现的原理

此处暂时空着,因为要有源码分析,后面节选一种动画源码来做分析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章