最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android組件content provider使用解析

 更新時間:2017年06月22日 17:16:18   作者:kma  
這篇文章主要為大家詳細解析了Android組件content provider的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、基本概念

Android四大組件之一 content provider,它主要的作用是:實現各個應用程序之間的(跨應用)數據共享。

在這里涉及到進程通信問題,自然在Android中使用的是binder來進行,但是由于content provider提供的數據量一般都比較大不能夠直接進行傳遞。

所以這里采用的是一種叫做 匿名共享內存的方式進行數據傳遞,在不同的進程中只需要傳遞一個文件描述符就可以。

通過下圖對content provider有個比較直觀的了解:

ContentProvider提供了在應用程序之前共享數據的一種機制。
1)存儲和獲取數據提供了統(tǒng)一的接口。
2)對數據進行封裝,不用關心數據存儲的細節(jié)。
3)Android為常見的一些數據提供了默認的ContentProvider(包括音頻、視頻、圖片和通訊錄等)。

二、content provider的定義

如果需要使用content provider首先需要在AndroidManifest中進行申明

<provider android:authorities="list" //該provider的唯一ID
     android:directBootAware=["true" | "false"]
     android:enabled=["true" | "false"] // 能否被系統(tǒng)實例化
     android:exported=["true" | "false"] //該provider能否被其他應用使用
     android:grantUriPermissions=["true" | "false"]
     android:icon="drawable resource"
     android:initOrder="integer"
     android:label="string resource"
     android:multiprocess=["true" | "false"]
     android:name="string"
     android:permission="string"
     android:process="string"
     android:readPermission="string" //讀權限
     android:syncable=["true" | "false"]
     android:writePermission="string" > //寫權限
  . . .
</provider>

注意在provider的屬性中最重要的是 authorities,它是唯一能夠標識一個provider,contentprovider通過URI中的地址來查找到對應的provider,其中該URI就包含了需要尋找的provider中的authorities屬性值。
定義好的provider最后被打包編譯進入到PackageManagerService中。

在Java代碼中定義一個provider時需要繼承其父類ContentProvider,并實現增刪查改方法。

public class XXXXProvider extends ContentProvider {

  @Override
  public boolean onCreate() {
    // TODO Auto-generated method stub
    return false;
  }
 
  @Override
  public Cursor query(Uri uri, String[] projection, String selection,
      String[] selectionArgs, String sortOrder) {
    // TODO Auto-generated method stub
    return null;
  }
 
  @Override
  public String getType(Uri uri) {
    // TODO Auto-generated method stub
    return null;
  }
 
  @Override
  public Uri insert(Uri uri, ContentValues values) {
    // TODO Auto-generated method stub
    return null;
  }
 
  @Override
  public int delete(Uri uri, String selection, String[] selectionArgs) {
    // TODO Auto-generated method stub
    return 0;
  }
  @Override
  public int update(Uri uri, ContentValues values, String selection,
      String[] selectionArgs) {
    // TODO Auto-generated method stub
    return 0;
  }
}


三、contentprovider的使用

在activity中如果想通過provider來實現增刪查改,首先需要獲取contentprovider,大致過程為在context中獲取contentResolver,然后通過contentResolver去ActivityManagerService中查詢對應的provider,如果沒有則進入PackageManagerService中查找:

1)首先每個context類都會內部包含了一個ContentResolver的子對象ApplicationContentResolver。
2)通過調用ApplicationContentResolver的主要方法query來獲取CP的數據庫數據。
3)調用的過程首先會調用ContentResolver的核心方法acquireProvider()。而acquireProvider()方法是一個抽象方法,其實現是交由子類實現。
4)通過子類的acquireProvider()方法實現了解到主要的實現是交由ActivityThread類來完成。
5)ActivityThread類會做出一個判斷,如果本地保存一個需要獲取的CP對象實例,就會直接返回這個對象實例,如果沒有保存,則會訪問AMS對象去查找獲取一個對象的CP對象實例,當找到這個對象實例后會保存到本地以便日后快速獲取。
6)如果在AMS里面沒有找到,就會繼續(xù)深入到PMS里去從全部的provider中查找。
7)獲取到CP對象實例后會通過層層返回,最后再調用該CP對象的query方法獲取相應的數據。

首先在應用的的manifest中需要進行讀寫權限申明,這個申明的定義跟之前provider定義中讀寫所需權限屬性值是一樣的:

<use-permission android:name="android.permission.READ_SMS"/>
<use-permission android:name="android.permission.WRITE_SMS"/>

在activity中獲取ContentResolver調用其中的操作方法時,需要傳入相對應的參數:

contentResolver.query(Uri uri, String[] projection,String selection, String[] selectionArgs,String orderBy);

uri:傳入對應uri是為了查找到對應的provider,跟provider在manifest中定義的authorities值是一樣

projection:選擇需要返回的對象屬性值,有時候不需要將對象的值全部返回。

selection/selectionArgs: 查詢條件

orderBy: 返回的對象排序方式

類似其他的delete、insert和update操作。最主要的是傳入正確的Uri才能找到對應的provider。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Flutter Future異步操作詳細講解

    Flutter Future異步操作詳細講解

    這篇文章主要介紹了Flutter Future異步操作,future是Future類的對象,其表示一個T類型的異步操作結果。如果異步操作不需要結果,則future的類型可為Future
    2023-03-03
  • Android實現圖片陰影效果的方法

    Android實現圖片陰影效果的方法

    這篇文章主要介紹了Android實現圖片陰影效果的方法,是比較實用的功能,需要的朋友可以參考下
    2014-07-07
  • Listvie簡單實現購物車功能

    Listvie簡單實現購物車功能

    這篇文章主要為大家詳細介紹了Listvie簡單實現購物車功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Android中l(wèi)ayer-list基本使用詳解

    Android中l(wèi)ayer-list基本使用詳解

    這篇文章主要介紹了Android中l(wèi)ayer-list基本使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • android手機獲取gps和基站的經緯度地址實現代碼

    android手機獲取gps和基站的經緯度地址實現代碼

    android手機如何獲取gps和基站的經緯度地址,疑問,于是網上搜集整理一些,拿出來和大家分享下,希望可以幫助你們
    2012-12-12
  • Android如何獲取系統(tǒng)通知的開啟狀態(tài)詳解

    Android如何獲取系統(tǒng)通知的開啟狀態(tài)詳解

    這篇文章主要給大家介紹了關于Android如何獲取系統(tǒng)通知開啟狀態(tài)的相關資料,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學習價值,需要的朋友們下面跟著小編來一起看看吧啊。
    2017-08-08
  • Android中獲取網頁表單中的數據實現思路及代碼

    Android中獲取網頁表單中的數據實現思路及代碼

    在Android中獲取網頁里表單中的數據具體實現代碼如下,感興趣的各位可以參考過下哈,希望對大家有所幫助
    2013-06-06
  • Android kotlin語言實現刪除文件的解決方案

    Android kotlin語言實現刪除文件的解決方案

    這篇文章主要介紹了Android kotlin語言實現刪除文件的解決方案,在項目開發(fā)過程中,尤其是需要跨平臺協作的項目,那么刪除用戶指定的文件的這種操作就顯得尤為重要了,需要的朋友可以參考下
    2025-02-02
  • android幾種不同對話框的實現方式

    android幾種不同對話框的實現方式

    這篇文章介紹了android幾種不同對話框的實現,主要包括:1、顯示提示消息的對話框.2、簡單列表項對話框。3、單選列表項對話框。4、多選列表對話框。5、自定義列表項對話框。6、自定義View的對話框,需要的朋友可以參考下
    2015-08-08
  • Android實現快遞單號查詢快遞狀態(tài)信息

    Android實現快遞單號查詢快遞狀態(tài)信息

    這篇文章主要為大家詳細介紹了Android實現快遞單號查詢快遞狀態(tài)信息,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論

红桥区| 安宁市| 靖宇县| 临西县| 岳普湖县| 慈溪市| 洛川县| 海林市| 疏附县| 永新县| 营山县| 黄大仙区| 尉氏县| 福贡县| 内丘县| 得荣县| 怀化市| 贵州省| 新津县| 新安县| 桦南县| 阿瓦提县| 上思县| 康平县| 绵阳市| 克山县| 沛县| 绩溪县| 吐鲁番市| 仁寿县| 清苑县| 威宁| 噶尔县| 利津县| 白朗县| 河曲县| 南宫市| 辽源市| 新平| 西乌珠穆沁旗| 灵宝市|