面試題:
1. 什麼是Binder,用來幹什麼?講講Binder的機制?
2. 動畫機制
1.Android中的動畫分爲哪些種類 & 特點 & 缺點。
2.知道SVG & 矢量動畫嗎?
3.給我說說轉場動畫。
4.給我談談插值器 & 估值器 的作用。
5.說說Android動畫框架實現的原理。
1. Binder的機制
1.1 什麼是Binder,用來做什麼?
-
什麼是Binder
Binder是Android的一個類,實現了IBinder接口。從IPC角度來講,Binder是Android中的一種跨進程通信方式。
-
Binder用來幹什麼?
在Android開發中,Binder主要用在Service中,包括AIDL和Messenger。
-
使用Binder進行進程間通信有什麼好處
- 性能:Binder數據拷貝只需要一次,而管道、消息隊列、Socket都需要兩次,共享內存方式雖然不需要拷貝,但實現方式非常複雜。
- 安全:Binder機制從協議本身就支持對通信雙方做身份校驗,相較傳統的IPC通信方式安全性會提升很多。
1.2 Binder機制
Binder基於Client-Server的通信模式,總共有4個角色。
- Client進程:調用端
- Server進程:提供服務的進程
- ServiceManager:Server需要註冊到Manager,Client可以從Manager中獲取Server的代理。
- Binder驅動:驅動負責進程間通信的建立,數據包在進程之間的傳遞及交互等一系列操作。
一個完整的Binder通信流程:
- Client通過ServiceManager獲取服務端的BinderProxy代理對象
- 調用BinderProxy將參數、方法標識等傳給ServiceManager
- Client線程進入等待狀態
- ServiceManager將用戶空間的參數等請求數據複製到內核空間,並向Server插入一條執行方法的事務
- 事務執行完成通知ServiceManager,ServiceManager將執行結果從內核空間複製到用戶空間
- 喚醒等待的線程,響應結果
2. 動畫機制
2.1 Android中的動畫分爲哪些種類 & 特點 & 缺點
- View動畫
view的真正位置並不會跟隨動畫移動。可以單獨或者組合使用平移、旋轉、縮放、透明等動畫效果。 - 幀動畫
多張不同的圖片,通過幀動畫拼接起來播放,即可實現動畫效果,一些相對比較複雜難以實現的效果通過它來實現,使用場景比較少。 - 屬性動畫
屬性動畫可以實現View動畫的所有效果,並且View的真正位置是跟着動畫一起動的,點擊事件及觸摸事件可以在動畫過程中執行。屬性動畫可以動態改變添加了getter和setter的View的屬性,從而改變View的繪製效果。 - 觸摸反饋動畫(Ripple Effect)
這是一種點擊效果,設置上之後,點擊控件後會產生漣漪效果 - 轉場動畫和共享元素
一般用在頁面跳轉時作爲轉場動畫使用。 - 矢量圖動畫(Vector動畫)
使用使用這個網址的工具將普通的圖片轉換爲Vector文件 ,如果有需要動態轉換效果的圖標或者需要特定效果的VectorDrawable圖片會用到矢量圖動畫
2.2 知道SVG & 矢量動畫嗎?
- SVG
知道,SVG是通過XML文件中的一系列點、線,曲線和相關顏色組成的矢量圖,放大不會失真,文件比圖片小,能夠通過控制path,寫出豐富的動畫效果。5.0以下需要引入兼容包才能支持。 - 矢量動畫
使用AnimatedVectorDrawableCompat可以將動畫屬性添加到矢量圖中,圖片可以添加平移、縮放、旋轉、透明等效果,path可以設置移動路徑、填充顏色,描邊寬度、顏色,透明度等等組合成複雜的動畫效果。
2.3 給我說說轉場動畫
Android 5.0之前支持Activity轉場動畫,分別在startActivity()和finish()調用的地方手動調用overridePendingTransition(in,out)指定進入和退出頁面的動畫效果。
Android5.0之後,啓動Activity時,可以調用ActivityOptionsCompat的不同方法實現轉場和共享元素過渡的效果。
2.4 給我談談插值器 & 估值器 的作用
插值器(Interpolator):主要是控制動畫的速度,主要包含:勻減速、勻加速、先加速後減速,先減速後加速、勻速等。
估值器(TypeEvaluator):控制屬性從動畫初始值到結束值中間的數值的具體變化值。比如,定義加速動畫的加速度值。
2.5 說說Android動畫框架實現的原理
此處暫時空着,因爲要有源碼分析,後面節選一種動畫源碼來做分析。