簡體   English   中英

Android ContentProvider與ORMLite

[英]Android ContentProvider vs ORMLite

我正在使用內容提供程序來管理我的應用程序數據,這些數據不與其他應用程序共享。 但是,有一些樣板代碼,例如將光標轉換為域對象。 ORMLite提供了一種更優雅的方式,可以直接將數據庫條目映射到域對象。 所以我想用ORMlite替換內容提供者。 但我有些擔心:

  1. 內容提供程序在多線程環境中正常工作。 我不知道ORMlite是否是線程安全的。
  2. 內容提供者可以廣播數據庫更改。 我不知道ORMLite是否有這種支持。
  3. Android提供程序的一些實用程序,如AsynQueryHandler,CursorLoader,以異步方式查詢數據庫。 如果我使用ORMLite,我必須顯式創建一個線程或AsyncTask來進行查詢。

我是否應該用ORMLite替換內容提供者?

我不認為,您可以將ORM與Content Provider進行比較。 ORMLite提供以下功能鏈接到用戶,並在開發時具有完全獨立的目標。

但除了你提到的東西之外,它們還有內容提供商的其他好處。

  1. 如果您想在多個應用程序或進程之間共享日期。 可能現在你沒有任何計划,但似乎你的應用程序在數據庫上很重,如果你計划與第三方或你的另一個應用程序共享你的數據,你可以選擇內容提供商。

  2. 內容提供商是Android的所有版本的標准,這也意味着您的應用程序是安全的。 我很確定ORMLite也很穩定。 但是你真的想冒這個風險,特別是如果不節省你的時間或你沒有任何業務要​​求這樣做。 Android API已經碎片化了你想在此基礎上再承擔另一項工作量嗎?

  3. 如果您想將數據上傳到雲,很容易與SyncAdapter集成

  4. 使用Android安全和權限功能。

您對處理Content Provider所需的額外代碼是正確的。

現在我正在開展一個項目,我們有大約20個桌子。 我為每個表創建了一個DAO。 基本上內部使用內容提供商。

DAO-> Content Provider-> SQL Lite Open Helper

Class XyzDao{
    private final Context mContext;
    XyzDao(Context context){
        this.mContext=context;
    }
    public String getMyData(){
        //content provider code
        return myData;
    }
    public void setMyData(String x, int y, double z){
        //content provider code to set the data
    }
}

我本可以在沒有內容提供商的情況下完成,現在當前的要求可以正常工作,但我仍然選擇這條路線。 你會問為什么?

  • 異步操作
  • 易於與平台/雲集成。
  • 減少代碼減少bug,減少戲劇性(想想如果我必須實現我們剛剛討論過的那些任務)

而且,最好的部分來自任何Activity我只需使用我的DAO來訪問數據庫。

或者,您可以直接從DAO訪問SQLLiteOpenHelper

在一天結束時,每個選擇都取決於您的業務需求。 如果你有很多持久性對象,ORMLite可能是個不錯的選擇。

一方面我更喜歡使用OrmLite制作ER模型,另一方面,ContentProvider提供了如上所述的一些好處。 這就是為什么我實現了通用的ContentProvider,允許訪問OrmLite ER模型。 這是https://github.com/blandware/android-atleap

我創建了一個可以使用的ORM庫,它基本上可以為您組合兩個用例,它被稱為CPOrm可以滿足您的需求。 您可以使用它來管理數據庫的創建和查詢,一切都通過Android內容提供商完成。 性能也很好,查詢每秒返回9000+個結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM