android面試題之二

六、android 中的動畫有哪幾種,它們的特點和區別是什麼 ?

 

逐幀動畫和補間動畫。

 

逐幀動畫:是傳統的動畫播放方式,指定每一幀的內容和停留時間,然後順序地播放排列好的圖片,類似電影。

 

補間動畫:給出兩個關鍵幀(初和末)和變化時間、方式,通過一些算法對View的內容在規定的時間內完成一系列的圖形變換。主要包括四種效果:Alpha、Scale、Translate和Rotate。

 

所以,補間動畫常用來播放一些有規律的動畫,而逐幀動畫則不一定。

 

 

 

七、請介紹下 Android 中常用的五種佈局

 

1.FrameLayout(幀佈局)

 

特點:組件都是從左上角開始放置,後面的會覆蓋前面的組件,就像往墻角堆砌東西一樣。佈局比較簡單,隻能放一點比較簡單的東西。

 

2.LinearLayout(線性佈局)

 

特點:最常用的佈局。分為垂直佈局和水平佈局。當垂直佈局時,每一行就隻有一個元素,多個元素依次垂直往下排列;水平佈局時,隻有一行,每一個元素依次向右排列。

 

3.AbsoluteLayout(絕對佈局)

 

特點:就是用X,Y坐標來指定組件的位置,這種佈局適應性太差,很少使用。

 

4.RelativeLayout(相對佈局)

 

特點:一種非常常用的佈局。相對佈局是一種以某一個元素為參照物,來確定其他組件位置的佈局方式。包括以某一組件為參照物和以父容器為參照物兩種情況。

 

5.TableLayout(表格佈局)

 

特點:類似Html裡面的Table。用TableRow來代表表格佈局中的每一行,在裡面去定義每一行的元素內容和對齊方式。

 

這幾種佈局都有自己的特點,在實際應用中,常常相互嵌套,結合使用,才能做出漂亮的界面。

 

 

 

八、如何啟用Service ,如何停用Service

 

啟動方式有兩種:startService(),bindService().它們都是Context的方法。

 

區別:使用startService()方法啟用服務,調用者與服務之間沒有關連, 即使調用者退出瞭,服務仍然運行。使用bindService()方法啟用服務,調用者與服務綁定在瞭一起,調用者一旦退出,服務也就終止.

 

停用:采用startService()方法啟動的服務,隻能調用Context.stopService()方法結束服務。

 

采用bindService()方法啟動的服務,調用者和服務綁定在瞭一起。若調用者退出,系統會調用onUnbind()方法解除綁定,然後調用onDestroy()方法。當然,開發者也可以自己調用Context.unbindService()方法手動解除綁定。接著,系統也會調用服務的onUnbind()–>onDestroy()方法。

 

 

 

九、註冊廣播有幾種方式,這些方式有何優缺點?

 

註冊方式有兩種:一是在代碼中動態註冊:registerReceiver(receiver,filter);

 

                二是在AndroidManifest中配置。

 

區別:

1)第一種不是常駐型廣播,也就是說廣播跟隨程序的生命周期。

2)第二種是常駐型,也就是說當應用程序關閉後,如果有信息廣播來,程序也會被系統調用自動運行。

 

註:當需要通過廣播更新UI時,一般采用動態註冊的方式,啟動Activity時候註冊BroadcastReceiver,Activity不可見時候,取消註冊。

 

在AndroidManifest配置還有一個缺點:由於它一直處於活動狀態,cpu和電源資源耗費比較大。

 

 

 

十、什麼是ANR 如何避免它?

 

ANR:Application Not Responding。

 

產生原因:在Android中,活動管理器和窗口管理器這兩個系統服務負責監視應用程序的響應,當用戶的操作在5s內應用程序沒能做出反應,BroadcastReceiver在10秒內沒有執行完畢,就會出現應用程序無響應對話框,這就是ANR。

 

解決方式:Activity應該在它的關鍵生命周期方法裡盡可能少的去做創建操作、潛在的耗時操作(網絡或數據庫操作等),或者高耗時的計算操作(改變位圖尺寸等),而應該在子線程裡(或者異步方式)來完成。主線程應該為子線程提供一個Handler,以便子線程完成時能夠提交給主線程。 

發佈留言