android面試題之三

十一、對一些資源以及狀態的操作保存,最好是保存在生命周期的哪個函數中進行?

若在onPause()中進行保存,相應需要在onResume()中進行恢復。

 

若在onStop()中進行保存,相應需要在onStart()中進行恢復。

 

另外,還有一個方法onSaveInstanceState(Bundle)。這種情況下,隻有當activity是被系統幹掉而退出的時候,保存的狀態才可以得到恢復,因為下次啟動時調用的onCreate(Bundle)方法中的Bundle對象就上次退出時保存狀態的Bundle對象。但Activity若不是被系統幹掉而是正常退出的,onCreate中的Bundle就是null瞭。

 

 

 

十二、為什麼要用ContentProvider?它和sql的實現上有什麼差別?

 

使用它的原因:是為瞭實現不同應用程序之間數據的共享。

 

與sql相同點:它的底層是用SQLite 數據庫實現的,所以其對數據做的各種操作都是以sql實現的,隻是在上層提供的是Uri。

 

與sql區別:可以屏蔽數據存儲的細節,對用戶完全透明,用戶隻需關心操作數據的Uri就可以瞭,所以從安全性角度考慮,使用ContentProvider更優。

 

 

 

十三、談談 UI 中, Padding 和 Margin 有什麼區別?

 

Padding:用在容器內部,指容器內部內容相對該容器邊框的距離。

 

Margin:用在容器外部,指自己相對其他(上下左右)View的距離。

 

 

 

十四、請介紹下 Android 的數據存儲方式。

 

Android提供瞭五中數據存儲方式:SharedPreferences存儲、文件存儲、SQLite數據庫存儲 、ContentProvider存儲、網絡存儲。

 

1、SharedPreferences存儲:用來存儲一些簡單的配置信息,采用的是鍵值對的方式進行存儲。

 

2、文件存儲:文件存儲數據是一種較常用的方式,在Android中常采用openFileInput()和openFileOutput()方法讀取/寫入文件。常用來存儲大數量的數據,缺點是更新數據困難。

 

3、SQLite數據庫存儲:SQLite是一個輕量級的數據庫,支持基本SQL語法,是常被采用的一種數據存儲方式。Android為此數據庫提供瞭一個名為SQLiteDatabase的類,封裝瞭一些操作數據庫的API。

 

以上三種方式存儲對應的目錄是:/data/data/PackageName/Shared_Pref、/data/data/PackageName/files、/data/data/PackageName/database。

 

4、ContentProvider存儲:Android系統中能實現所有應用程序共享的一種數據存儲方式,由於數據通常在各應用間的是互相私密的,所以此存儲方式較少使用,但是其又是必不可少的一種存儲方式。例如音頻,視頻,圖片和通訊錄,一般都可以采用此種方式進行存儲,每個ContentProvider都會對外提供一個公共的URI(包裝成Uri對象),如果應用程序有數據需要共享時,就需要使用ContentProvider為這些數據定義一個URI,然後其他的應用程序就通過Content Provider傳入這個URI來對數據進行操作。使用ContentProvider的好處在於統一瞭數據訪問方式。

 

5、網絡存儲:前面介紹的幾種存儲都是將數據存儲在本地設備上,除此之外,還有一種存儲(獲取)數據的方式,即通過網絡來實現數據的存儲和獲取。我們可以調用WebService返回的數據或是解析HTTP協議實現網絡數據交互。

 

具體需要熟悉java.net.*,Android.net.*這兩個包的內容,可以參閱相關文檔。

 

在實際應用中,常常需要根據設計目標、性能需求、空間需求等來選擇合適的數據存儲方式.

 

 

 

十五、說說android 中 mvc 的具體體現

 

mvc是model、view、controller的縮寫。

 

1.視圖層(view):一般采用xml文件進行界面的描述,使用的時候可以非常方便的引入,當然,如果你對android瞭解得比較多的話,就一定可以想到在android中也可以使用javascript+html等的方式作為view層,當然這裡需要進行java和javascript之間的通信,android提供瞭它們之間非常方便的通信實現。

2.控制層(controller):android的控制層的重任通常落在瞭眾多的activity的肩上,通過事件控制等完成與業務邏輯層之間的交互,而耗時操作都應放在model層,這樣做的一個原因是android中的activity的響應時間是5s,如果耗時的操作放在activity裡面,程序就很容易被回收掉。

3.模型層(model):對數據庫的操作、對網絡等的操作以及業務計算操作和一些高耗時的計算操作都應該在model裡面處理。

發佈留言