1. 程式人生 > >Android 面試題總結之Android 基礎(二)

Android 面試題總結之Android 基礎(二)

Android 面試題總結之Android 基礎ContentProvider(二)

在上一章節Android 面試題總結之Android 基礎Activity(一) 我們講的Activity基礎知識。有許多朋友反映看著比較亂,我又回去看了看 ,確實很亂,不夠細心。然後我又重新整理了一遍。讓大家閱讀體驗更好!

在閱讀過程中有任何問題,請及時聯絡。
本章系《Android 之美 從0到1 – 高手之路》Android基礎ContentProvider 總結了Android 開發者面試比較常見的ContentProvider和Intent相關面試問題。希望對廣大Android 開發者,有所幫助。

ContentProvider 常見知識點

  1. ContentProvider 是如何實現資料共享的

    在 Android 中如果想將自己應用的資料(一般多為資料庫中的資料)提供 給第三發應用,那麼我們只能通過 ContentProvider 來實現了。
    ContentProvider 是應用程式之間共享資料的介面。使用的時候首先自定義 一個類繼承 ContentProvider,然後覆寫 query、insert、update、delete 等 方法。因為其是四大元件之一因此必須在 AndroidManifest 檔案中進行註冊。
    把自己的資料通過 uri 的形式共享出去
    android 系統下 不同程式 資料預設是不能共享訪問 需要去實現一個類去繼承 ContentProvider

    public class PersonContentProvider extends ContentProvider{    public boolean onCreate(){
    } query(Uri, String[], String, String[], String)
    insert(Uri, ContentValues)
    update(Uri, ContentValues, String, String[]) delete(Uri, String,  String[])
    }    
    

    “`

  第三方可以通過 ContentResolver 來訪問該 Provider。


2.
**Android 的資料儲存方式** a. File 儲存 b. SharedPreference 儲存 c. ContentProvider 儲存 d. SQLiteDataBase 儲存 e. 網路儲存 關於ContentProvider相關基礎知識點,本章節就先總結到這來。希望對大家有所幫助。 3. **為什麼要用 ContentProvider?它和 sql 的實現上有什麼差別?** ContentProvider 遮蔽了資料儲存的細節,內部實現對使用者完全透明,使用者只 需要關心操作資料的 uri 就可以了,ContentProvider 可以實現不同 app 之間 共享。 Sql 也有增刪改查的方法,但是 sql 只能查詢本應用下的資料庫。而 ContentProvider 還可以去增刪改查本地檔案. xml 檔案的讀取等。 4. **說說ContentProvider 、 ContentResolver 、 ContentObserver 之間的關係** a. ContentProvider 內容提供者,用於對外提供資料 b. ContentResolver.notifyChange(uri)發出訊息 c. ContentResolver 內容解析者,用於獲取內容提供者提供的資料 d. ContentObserver 內容監聽器,可以監聽資料的改變狀態 e. ContentResolver.registerContentObserver()監聽訊息。 5. **Uri介紹** 為系統的每一個資源給其一個名字,比方說通話記錄。 1)、每一個ContentProvider都擁有一個公共的URI,這個URI用於表示這個ContentProvider所提供的資料。 2)、Android所提供的ContentProvider都存放在android.provider包中。 將其分為A,B,C,D 4個部分: A:標準字首,用來說明一個Content Provider控制這些資料,無法改變的;"content://" B:URI 的標識,用於唯一標識這個ContentProvider,外部呼叫者可以根據這個標識來找到它。它定義了是哪個Content Provider提供這些資料。對於第三方應用程式,為了保證URI標識的唯一性,它必須是一個完整的、小寫的類名。這個標識在 元素的 authorities屬性中說明:一般是定義該ContentProvider的包.類的名稱 C:路徑(path),通俗的講就是你要操作的資料庫中表的名字,或者你也可以自己定義,記得在使用的時候保持一致就可以了;"content://com.bing.provider.myprovider/tablename" D:如果URI中包含表示需要獲取的記錄的ID;則就返回該id對應的資料,如果沒有ID,就表示返回全部; "content://com.bing.provider.myprovider/tablename/#" #表示資料id。 6. **如何訪問 asserts 資源目錄下的資料庫?** 把資料庫db複製到 /data/data/packagename/databases/目錄下 然後直接就能訪問了。 ## Intent 詳解 1. **Android Intent的使用** 三大元件——Activity、Service和Broadcast Receiver都是被什麼啟用的? 答案:Intent是一種執行時繫結的訊息機制,而三大元件——Activity、Service和Broadcast Receiver都是被訊息啟用的,這種訊息就是Intent。 一個Intent物件包括六個屬性,請一一列舉這六個屬性。 答案:元件名(Component Name)、動作(Action)、資料(Data)、分類(Category)、額外資訊(Extra)和標誌(Flags)。 答案:在一個Android應用中,主要是由一些元件組成,(Activity,Service,ContentProvider,etc.)在這些元件之間的通訊中,由Intent協助完成。 正如網上一些人解析所說,Intent負責對應用中一次操作的動作、動作涉及資料、附加資料進行描述,Android則根據此Intent的描述,負責找到對應的元件,將 Intent傳遞給呼叫的元件,並完成元件的呼叫。Intent在這裡起著實現呼叫者與被呼叫者之間的解耦作用。 Intent傳遞過程中,要找到目標消費者(另一個Activity,IntentReceiver或Service),也就是Intent的響應者,有兩種方法來匹配: 1、顯示意圖: 虛擬碼 ``` public TestB extents Activity { ......... }; public class Test extends Activity { ...... public void switchActivity() { Intent i = new Intent(Test.this, TestB.class); this.startActivity(i); } }

程式碼簡潔明瞭,執行了switchActivity()函式,就會馬上跳轉到名為TestB的Activity中。

2、隱式意圖:

隱式匹配,首先要匹配Intent的幾項值:Action, Category, Data/Type,Component
如果填寫了Componet就是上例中的Test.class)這就形成了顯示匹配。所以此部分只講前幾種匹配。匹配規則為最大匹配規則,

1、如果你填寫了Action,如果有一個程式的Manifest.xml中的某一個Activity的IntentFilter段中定義了包含了相同的Action那麼這個Intent就與這個目標Action匹配,如果這個Filter段中沒有定義Type,Category,那麼這個Activity就匹配了。但是如果手機中有兩個以上的程式匹配,那麼就會彈出一個對話可框來提示說明。
Action的值在Android中有很多預定義,如果你想直接轉到你自己定義的Intent接收者,你可以在接收者的IntentFilter中加入一個自定義的Action值(同時要設定Category值為”android.intent.category.DEFAULT”),在你的Intent中設定該值為Intent的Action,就直接能跳轉到你自己的Intent接收者中。因為這個Action在系統中是唯一的。
2、data/type,你可以用Uri來做為data,比如Uri uri = Uri.parse(http://www.google.com );
Intent i = new Intent(Intent.ACTION_VIEW,uri);手機的Intent分發過程中,會根據http://www.google.com 的scheme判斷出資料型別type
手機的Brower則能匹配它,在Brower的Manifest.xml中的IntenFilter中首先有ACTION_VIEW Action,也能處理http:的type,

3、至於分類Category,一般不要去在Intent中設定它,如果你寫Intent的接收者,就在Manifest.xml的Activity的IntentFilter中包含android.category.DEFAULT,這樣所有不設定Category(Intent.addCategory(String c);)的Intent都會與這個Category匹配。

4、extras(附加資訊),是其它所有附加資訊的集合。使用extras可以為元件提供擴充套件資訊,比如,如果要執行“傳送電子郵件”這個動作,可以將電子郵件的標題、正文等儲存在extras裡,傳給電子郵件傳送元件。

  1. IntentFilter(Intent過濾器)
    為什麼要引入IntentFilter?
    答案:對於顯式Intent,它的接受者已被指定,所以系統會自動把這個Intent發給指定的元件。但是對於隱式Intent,由於並沒有指定其元件名屬性,所以系統不知道該把它發給哪個元件名,於是系統就直接將其發出去,算是所有的元件都有權接收,這就需要定義一個元件可以接收到哪些Intent,所以就引入了IntentFilter(Intent過濾器)。

  2. Intent 傳遞資料時,可以傳遞哪些型別資料?
    Intent 可以傳遞的資料型別非常的豐富,java 的基本資料型別和 String 以及他們的陣列形式都可以,除此之 外還可以傳遞實現了 Serializable 和 Parcelable 介面的物件。

  3. Serializable 和 Parcelable 的區別?
    1.在使用記憶體的時候,Parcelable 類比 Serializable 效能高,所以推薦使用 Parcelable 類。
    2.Serializable 在序列化的時候會產生大量的臨時變數,從而引起頻繁的 GC。
    3.Parcelable 不能使用在要將資料儲存在磁碟上的情況。儘管 Serializable 效率低點,但在這種情況下,還是建
    議你用 Serializable 。 實現:
    1 Serializable 的實現,只需要繼承 Serializable 即可。這只是給物件打了一個標記,系統會自動將其序列化。
    2 Parcelabel 的實現,需要在類中新增一個靜態成員變數 CREATOR,這個變數需要繼承 Parcelable.Creator 接 口。

關於ContentProvider和Intent相關面試問題,本章節就先總結到這來。希望對大家有所幫助。

相關推薦

Android 試題總結Android 基礎

Android 面試題總結之Android 基礎Activity(一) 轉眼間畢業好久了,寫程式也很久了,從高中就一直寫到現在好多年了啊,學習了很多東西,把之前整理的資料和知識點慢慢分享出來。這裡主要總結Android可能出的面試的題目比較全面\詳細,持

Android 試題總結Android 基礎

Android 面試題總結之Android 基礎Broadcast Receiver(三) 在上一章節Android 面試題總結之Android 基礎ContentProvider(二) 我們講的ContentProvider和Intent基礎知識。本節

Android 試題總結Android 基礎

Android 面試題總結之Android 基礎(ListView)(五) 前幾篇面試總結中,主要講了Android 的四大元件的相關知識點,希望在大家日常工作中有所幫助,那麼在本節中主要是Android 必不可少的ListView 的相關知識點。Lis

Android 試題總結Android 基礎

Android 面試題總結之Android 基礎Service(四) 在上一章節Android 面試題總結之Android 基礎Broadcast Receiver(三) 我們講了Broadcast Receiver基礎知識。本節主要講解Service相

Android 試題總結Android 基礎

Android 面試題總結之Android 基礎ContentProvider(二) 在上一章節Android 面試題總結之Android 基礎Activity(一) 我們講的Activity基礎知識。有許多朋友反映看著比較亂,我又回去看了看 ,確實很亂

Android 試題總結Android 進階

Android 之美 從0到1 之Android 進階(二) 在上一章節中《Android 之美 從0到1 之Android 進階(一)》中我們已經理解了一些View的基本知識並且知道如何自定義View。那麼本章節將繼續深入理解View,關於View的繪

詳解Android View的事件體系 View基礎

前言 掌握View的事件體系是Android 向高階邁向的必經之路,本片部落格講解Android View的相關基礎知識第二部分,後面我們會為大家講解View事件體系、View事件分發等知識內容。View相關知識第一部分https://blog.csdn.net/huangliniqng/a

2018年Android試題含答案--適合中高階

1、Activity生命週期? onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDetroy() 2、Service生命週期? service 啟動方式有兩種,一種是通過

2018年Android試題含答案--適合中高階

2018年Android面試題含答案–適合中高階(上) 轉載 【原連結】新增連結描述 這些面試題是我在今年年初換工作的時候整理,沒有重點。包括java基礎,資料結構,網路,Android相關等等。適合中高階工程師。由於內容過多,將會分為上下兩部分。下部分跳轉連結: https://blog.

Java試題總結Java基礎(三)

  1、JAVA 語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什麼意義?在try 塊中可以丟擲異常嗎? 答:Java 通過面向物件的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的介面。在Java 中,每個異常都是一個物件,它是Th

試題總結——JAVA高階工程師

三、面試題基礎總結 1、 JVM結構原理、GC工作機制詳解 答:具體參照:JVM結構、GC工作機制詳解     ,說到GC,記住兩點:1、GC是負責回收所有無任何引用物件的記憶體空間。 注意:垃圾回收回收的是無任何引用的物件佔據的記憶體空間而不是物件本身,2、GC回收

Python學習Numpy基礎

一:判斷array中的值是否滿足條件vector = numpy.array([10, 20, 30, 40, 50]) equal_to_ten = (vector == 10) print(equal_to_ten)列印結果:[ True False False Fals

2018年最新JAVA試題總結基礎1

轉自於:https://zhuanlan.zhihu.com/p/39322967   1、JAVA中能建立volatile陣列嗎?volatile能使得一個非原子操作變成原子操作嗎? 回答: 能,Java 中可以建立 volatile 型別陣列,不過只是一個指向陣列的引用,而不是整個陣列。J

android試題總結加強再加強版

在加強版的基礎上又再加強的android應用面試題集 有些補充略顯臃腫,只為學習 1.activity的生命週期。 方法 描述 可被殺死 下一個 在activity第一次被建立的時候呼叫。這裡是你做所有初始化設定的地方──建立檢視、設定佈局、繫結資

Android試題總結執行緒,多執行緒,執行緒池

1.開啟執行緒的三中方式?https://blog.csdn.net/longshengguoji/article/details/41126119(轉)https://blog.csdn.net/u012973218/article/details/51280044(轉)2

Android試題總結加強版

自己總結的最強android應用面試題集 26.如果後臺的Activity由於某原因被系統回收了,如何在被系統回收之前儲存當前狀態? 當你的程式中某一個Activity A 在執行時中,主動或被動地執行另一個新的Activity B  這個時候A會執行 Java程式碼 pu

Java試題總結資料結構、演算法和計算機基礎劉小牛和絲音的愛情故事1

        Java面試題總結之資料結構、演算法和計算機基礎(劉小牛和絲音的愛情故事1)​mp.weixin.qq.com 全文字數: 1703 閱讀時間: 大約6 分鐘 劉小牛是一名Java程式設計師,

Android試題3描寫敘述下Android的系統架構

都是 csdn 進行 功能 驅動程序 libraries sso 封裝 rar 描寫敘述下Android的系統架構: Android系統從下往上分為Linux內核層(linux kerner),執行庫(runtime library),應用程序框架層,

Android 試題總結

src 根據 四大組件 使用 順序 onf 結構 每次 面試 1.Android四大組件以及作用??? Activity:Activity是Android程序與用戶實現交互的窗口,是Android中最重要的一中,它需要保存各界面的狀態,做很多持久化的

2018年最新JAVA試題總結資料庫3

轉自於:https://zhuanlan.zhihu.com/p/39804394   1、MySQL的delete與truncate區別? 回答:delete語句執行刪除的過程是每次從表中刪除一行,並且同時將該行的刪除操作作為事務記錄在日誌中儲存以便進行回滾操作,不清空AUTO_INCREM