1. 程式人生 > >Android程式設計師必會的十大基礎面試題----阿冬專欄

Android程式設計師必會的十大基礎面試題----阿冬專欄

  1

  Android中五種資料儲存方式分別是什麼?他們的特點?

  Android提供了五種存取資料的方式

  1)SharedPreference,存放較少的五種型別的資料,只能在同一個包內使用,生成XML的格式存放在裝置中;

  2)SQLite資料庫,存放各種資料,是一個輕量級的嵌入式資料庫;

  3)File檔案,通過讀取寫入方式生成檔案存放資料;

  4)ContentProvider,主要用於讓其他應用程式使用儲存的資料;

  5)通過網路獲取資料和寫入資料到網路儲存空間。

  2

  說說 android 中 mvc 的具體體現

  mvc是model,view,controller的縮寫,mvc包含三個部分:

  模型(model)物件:是應用程式的主體部分,所有的業務邏輯都應該寫在該層。

  檢視(view)物件:是應用程式中負責生成使用者介面的部分。也是在整個mvc架構中使用者唯一可以看到的一層,接收使用者的輸入,顯示處理結果。

  控制器(control)物件:是根據使用者的輸入,控制使用者介面資料顯示及更新model物件狀態的部分,控制器更重要的一種導航功能,響應使用者出發的相關事件,交給m層處理。

  android鼓勵弱耦合和元件的重用,在android中mvc的具體體現如下:

  1)檢視(view):一般採用xml檔案進行介面的描述,使用的時候可以非常方便的引入。

  2)

控制層(controller):android的控制層的重任通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在activity中寫過多的程式碼,要通過activity交割model業務邏輯層處理,這樣做的另外一個原因是android中的activity的響應時間是5s,如果耗時的操作放在這裡,程式就很容易被回收掉。

  3)模型層(model):對資料庫的操作、對網路等的操作都應該在model裡面處理,當然對業務計算等操作也是必須放在的該層的。

  3

  簡述SharedPreferences儲存方式以及SharedPreferences與SQLite資料庫的區別。

  SharedPreferences也是一種輕型的資料儲存方式,它的本質是基於XML檔案儲存key-value鍵值對資料,通常用來儲存一些簡單的配置資訊。其儲存位置在/data/data/<包名>/shared_prefs目錄下。SharedPreferences物件本身只能讀取資料而不支援寫入資料,儲存修改是通過Editor物件實現。SharedPreferences物件與SQLite資料庫相比,免去了建立資料庫,建立表,寫SQL語句等諸多操作,相對而言更加方便,簡潔。但是SharedPreferences也有其自身缺陷,比如其職能儲存boolean,int,float,long和String五種簡單的資料型別,比如其無法進行條件查詢等。所以不論SharedPreferences的資料儲存操作是如何簡單,它也只能是儲存方式的一種補充,而無法完全替代如SQLite資料庫這樣的其他資料儲存方式。

  4

  描述handler 機制的原理

  andriod提供了 Handler 和 Looper 來滿足執行緒間的通訊。

  Handler 先進先出原則。Looper類用來管理特定執行緒內物件之間的訊息交換(Message Exchange)。

  1)Looper: 一個執行緒可以產生一個Looper物件,由它來管理此執行緒裡的Message Queue(訊息佇列)。

  2)Handler: 你可以構造Handler物件來與Looper溝通,以便push新訊息到Message Queue裡;或者接收Looper從Message Queue取出)所送來的訊息。

  3)Message Queue(訊息佇列):用來存放執行緒放入的訊息。

  4)執行緒:UI thread 通常就是main thread,而Android啟動程式時會替它建立一個Message Queue。

  5

  顯式intent和隱式intent的區別是什麼(Android)

  Intent定義:Intent是一種在不同元件之間傳遞的請求訊息,是應用程式發出的請求和意圖。作為一個完整的訊息傳遞機制,Intent不僅需要傳送端,還需要接收端。

  顯式Intent定義:對於明確指出了目標元件名稱的Intent,我們稱之為顯式Intent;

  隱式Intent定義:對於沒有明確指出目標元件名稱的Intent,則稱之為隱式Intent。

  說明:Android系統使用IntentFilter 來尋找與隱式Intent相關的物件。

  6

  如何優化ListView

  1)如果自定義介面卡,那麼在getView方法中要考慮方法傳進來的引數contentView是否為null,如果為null就建立contentView並返回,如果不為null則直接使用。在這個方法中儘可能少建立view;

  2)給contentView設定tag(setTag()),傳入一個viewHolder物件,用於快取要顯示的資料,可以達到影象資料非同步載入的效果;

  3)如果listview需要顯示的item很多,就要考慮分頁載入。比如一共要顯示100條或者更多的時候,我們可以考慮先載入20條,等使用者拉到列表底部的時候再去載入接下來的20條。

  7

  簡述通過contentResolver獲取ContentProvider內容的基本步驟

  1)得到ContentResolver類物件:ContentResolver cr = getContentResolver();

  2)定義要查詢的欄位String陣列;

  3)使用cr.query();返回一個Cursor物件;

  4)使用while迴圈得到Cursor裡面的內容。

  8

  描述4 種 activity 的啟動模式

  1)standard :系統的預設模式,一次跳轉即會生成一個新的例項。假設有一個activity命名為MainActivity,執行語句:

  startActivity(new Intent(MainActivity.this, MainActivity.class))後,MainActivity將跳轉到另外一個MainActivity,也就是現在的Task棧裡面有MainActivity的兩個例項。按返回鍵後你會發現仍然是在MainActivity(第一個)裡面。

  2)singleTop:singleTop 跟standard 模式比較類似。如果已經有一個例項位於Activity棧的頂部時,就不產生新的例項,而只是呼叫Activity中的newInstance()方法。如果不位於棧頂,會產生一個新的例項。例:當MainActivity為 singleTop 模式時,執行跳轉後棧裡面依舊只有一個例項,如果現在按返回鍵程式將直接退出。

  3)singleTask: singleTask模式和後面的singleInstance模式都是隻建立一個例項的。在這種模式下,無論跳轉的物件是不是位於棧頂的activity,程式都不會生成一個新的例項(當然前提是棧裡面已經有這個例項)。這種模式相當有用,在以後的多activity開發中,經常會因為跳轉的關係導致同個頁面生成多個例項,這個在使用者體驗上始終有點不好,而如果你將對應的activity宣告為 singleTask 模式,這種問題將不復存在。

  4)singleInstance: 設定為 singleInstance 模式的 activity 將獨佔一個task(感覺task可以理解為程序),獨佔一個task的activity與其說是activity,倒不如說是一個應用,這個應用與其他activity是獨立的,它有自己的上下文activity。

  

  9

  Android中如何訪問自定義ContentProvider?

  通過ContentProvider的Uri訪問開放的資料。

  1)ContenResolver物件通過Context提供的方法getContenResolver()來獲得。

  2)ContenResolver提供了以下方法來操作:insert delete update query這些方法分別會呼叫ContenProvider中與之對應的方法並得到返回的結果。

  10

  Android中的動畫有哪幾類,它們的特點和區別是什麼?

  Android中動畫可以分為兩大類:幀動畫、補間動畫

  1)補間動畫:你定義一個開始和結束,中間的部分由程式運算得到。主要有:旋轉、平移、放縮和漸變;AlphaAnimation(漸變型動畫)、scaleAnimation(縮放型動畫)、 TranslateAnimation(平移型動畫)、 RotateAnimation(旋轉型動畫)、

  2)逐幀動畫:Frame(把一連串的圖片進行系列化連續播放,如同放電影的效果),它是通過播放一張一張圖片來達到動畫的效果。