1. 程式人生 > >Android筆試和麵試常見題目(一)

Android筆試和麵試常見題目(一)

自己整理的一些Android常見面試題,歡迎各位參考。 有錯誤或有更好的題目答案可以聯絡修改。

1、NDK是什麼?
NDK是開發人員在android應用中嵌入使用原生代碼編寫的元件。
本地開發資源包。

NDK是一些列工具的集合,NDK提供了一系列的工具,幫助開發者迅速的開發C/C++的動態庫,並能自動將so和java 應用打成apk包。
NDK集成了交叉編譯器,並提供了相應的mk檔和隔離cpu、平臺等的差異,開發人員只需簡單的修改mk檔就可以創建出so。

2、說說MVC設計模式的原理。
View傳送到指令到Controller
Controller完成業務邏輯後,使用者的到反饋
MOdel將新的資料傳送到View,使用者得到反饋
SP:所有的通訊都是單向。
1)檢視層(view)(使用者介面):一般採用xml檔進行介面的描述,使用的時候可以非常方便的引入,當然,如果你對android瞭解的比較的多了話,就一定可以想到在android中也可以使用JavaScript+html等的方式作為view層,當然這裡需要進行java和javascript之間的通訊,幸運的是,android提供了它們之間非常方便的通訊實現。
2)控制層(controller):android的控制層的重任通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫程式碼,要通過activity交割model業務邏輯層處理,這樣做的另外一個原因是android中的acitivity的迴應時間是5s,如果耗時的操作放在這裡,程式就很容易被回收掉。
3)模型層(model):對資料庫的操作、對網路等的操作都應該在model裡面處理,當然對業務計算等操作也是必須放在的該層的。

MVP模式
MVP模式將Controller改名為Persenter,同時改變了通訊的方向
1.各部分之間的通訊,都是雙向的
2.View和Model不發生關係,都通過Presenter傳遞
3.View非常薄,不部署任何業務邏輯,稱為”被動檢視”(Passive View),即沒有任何主動性,而Presenter非常厚,所有邏輯都部署在那裡。
MVVM模式
MVVM模式將Presenter改名為ViewModel,基本與MVP模式完全一致。
唯一不同的是:它採用雙向繫結(data-binding),View的變動,自動反映在ViewModel,反之亦然。

3、請談一下android系統的架構。


1.應用層: 所有安裝在手機上的應用程式都是屬於這一層的,比如系統自帶的聯絡人、簡訊等程式,或者我們從Google Play上下載的程式,包括我們自己開發的應用程式。
2.應用框架層: 這一層主要提供了構建應用時可能用到的API。Android自帶的一些核心應用程式就是使用這些API完成的,開發者可以通過使用這些API構建自己的應用程式。比如有活動管理器、View系統。內容提供器、通知管理器等。
3.執行庫:負責解釋和執行生成的dalvik格式的位元組碼。
這一層通過一些C/C++庫來為Android系統提供了主要的特性支援,這一層還有Android執行時庫,它提供了一些核心庫,能允許開發者使用Java來編寫Android應用。
4.硬體抽象層(HAL):它是裝置核心驅動的抽象介面,實現向更高級別的Java API框架提供訪問底層裝置的應用程式設計介面。
5.Linux核心層:負責硬體的驅動程式、網路、電源、系統安全以及儲存器管理等功能。
(現在一般分為五層,小夥伴可以查一下資料)

4、android常用的五種佈局
LinearLayout:線性佈局
1.每一個LinearLayout裡面又可分為垂直佈局(android:orientation=”vertical”)和水平佈局(android:orientation=”horizontal” )。當垂直佈局時,每一行就只有一個元素,多個元素依次垂直往下;水平佈局時,只有一行,每一個元素依次向右排列。

RelativeLayout:相對佈局
1.相對佈局可以理解為某一個元素為參照物,來定位的佈局方式。
FrameLayout:幀佈局
1.所有東西依次都放在左上角,會重疊,這個佈局比較簡單,也只能放一點比較簡單的東西。
TableLayout:表格佈局
1.:表格佈局,每一個TableLayout裡面有表格行TableRow,TableRow裡面可以具體定義每一個元素。
AbsoluteLayout:絕對佈局
1.絕對佈局用X,Y座標來指定元素的位置,這種佈局方式也比較簡單,但是在熒幕旋轉時,往往會出問題,而且多個元素的時候,計算比較麻煩。

5、media player與video view的區別
media player:用於音訊播放
video view:android系統提供的一個媒體播放顯示和控制的控制元件,它繼承surfaceView。
系統提供的媒體播放顯示和控制的控制元件,它繼承surfaceView。

6、Tween Animation(補間動畫)有哪幾種特點。
平移,縮放,旋轉,集合。

7、動畫有哪幾種,特點和區別。
幀動畫: AnimationDrawable 控制animation-list xml佈局
補間動畫:通過指定View的初末狀態和變化時間、方式,對View的內容完成一系列的圖形變換來實現動畫效果
屬性動畫:屬性動畫在某些內容上對補間動畫進行了補充。比如改變了控制元件的屬性。

答:兩種,一種是Tween動畫、還有一種是Frame動畫。
Tween動畫,這種實現方式可以使檢視元件移動、放大、縮小以及產生透明度的變化;
另一種Frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影

8、Handler與Looper的作用與區別
Handler: 是Message的主要處理者,負責Message的傳送,Message內容的執行處理。例如將訊息傳送到訊息佇列(sendMessage),更新UI元件(實現該類的handleMessage方法)
Looper:是Handler和訊息佇列之間的通訊橋樑,程式元件首先通過Handler把訊息傳遞給Looper,Looper把訊息放到佇列。Looper也把訊息佇列裡的訊息廣播給所有的Looper。

9、ListView的優化方案
答:1、如果自定義介面卡,那麼在getView方法中要考慮方法傳進來的引數contentView是否為null,如果為null就建立contentView並返回,如果不為null則直接使用。在這個方法中儘可能少建立view。
2、給contentView設定tag(setTag()),傳入一個viewHolder物件,用於快取要顯示的資料,可以達到影象資料非同步載入的效果。
3、如果listview需要顯示的item很多,就要考慮分頁載入。比如一共要顯示100條或者更多的時候,我們可以考慮先載入20條,等使用者拉到列表底部的時候再去載入接下來的20條。

① 複用 ConvertView,使用歷史的 view,提升效率 200%
② 自定義靜態類 ViewHolder,減少 findViewById 的次數。提升效率 50%
③ 非同步載入資料,分頁載入資料。
④ 使用 WeakRefrence 引用 ImageView 物件

10、請介紹下Android的資料儲存方式
使用SharedPreferences儲存資料;檔儲存資料;SQLite資料庫儲存資料;使用ContentProvider儲存資料;網路儲存資料;
1.首先說明SharedPreferences儲存方式,它是 Android提供的用來儲存一些簡單配置資訊的一種機制。
2.檔儲存方式是一種較常用的方法,在Android中讀取/寫入檔的方法,與 Java中實現I/O的程式是完全一樣的,提供了openFileInput()和openFileOutput()方法來讀取裝置上的檔。
3.ContentProvider:當外部應用需要對ContentProvider中的資料進行新增、刪除、修改和查詢操作時,可以使用 ContentResolver 類來完成,要獲取ContentResolver 物件,可以使用Activity提供的getContentResolver()方法。 ContentResolver使用insert、delete、update、query方法,來操作資料。

11、Service開啟
使用startService()方法啟用服務,呼叫者與服務之間沒有關連,即使呼叫者退出了,服務仍然執行。使用bindService()方法啟用服務,呼叫者與服務繫結在了一起,呼叫者一旦退出,服務也就終止,大有“不求同時生,必須同時死”的特點。
1.onCreate() 該方法在服務被建立時呼叫,該方法只會被呼叫一次,無論呼叫多少次2.startService()或bindService()方法,服務也只被建立一次。

12、什麼是ANR 如何避免它?
答:ANR:Application Not Responding。在Android中,活動管理器和視窗管理器這兩個系統服務負責監視應用程式的迴應,當用戶操作的在5s內應用程式沒能做出反應,BroadcastReceiver在10秒內沒有執行完畢,就會出現應用程式無迴應對話方塊,這既是ANR。
事件沒有機會處理
事件處理超時
避免方法:Activity應該在它的關鍵生命週期方法(如onCreate()和onResume())裡儘可能少的去做建立操作。潛在的耗時操作,例如網路或資料庫操作,或者高耗時的計算如改變點陣圖尺寸,應該在子執行緒裡(或者非同步方式)來完成。主執行緒應該為子執行緒提供一個Handler,以便完成時能夠提交給主執行緒。

自己整理的一些Android常見面試題,歡迎各位參考。 有錯誤或有更好的題目答案可以聯絡修改。