【问题标题】:Android ContentProvider vs ORMLiteAndroid ContentProvider 与 ORMLite
【发布时间】:2015-04-18 19:10:40
【问题描述】:

我正在使用内容提供程序来管理我的应用程序数据,这些数据不与其他应用程序共享。但是,有一些样板代码,例如将光标转换为域对象。 ORMLite 提供了一种更优雅的方式,将数据库条目直接映射到域对象。所以我想用 ORMlite 替换内容提供者。但我有些担心:

  1. 内容提供程序在多线程环境中工作正常。我不知道 ORMlite 是否是线程安全的。
  2. 内容提供者可以广播数据库更改。不知道ORMLite有没有这种支持。
  3. Android 提供了一些实用程序,如 AsynQueryHandler、CursorLoader 来异步查询数据库。如果我使用 ORMLite,我必须显式创建一个线程或 AsyncTask 来执行查询。

我是否应该用 ORMLite 替换内容提供者?

【问题讨论】:

    标签: android android-contentprovider ormlite


    【解决方案1】:

    我不认为,您可以将其与带有 Content Provider 的 ORM 进行比较。 ORMLite 向用户提供以下功能link,并在开发时具有完全独立的目标。

    但除了您提到的内容之外,它们还有内容提供商的其他一些好处。

    1. 如果您想在多个应用程序或进程之间共享日期。可能现在您没有任何计划这样做,但您的应用程序似乎对数据库很重,并且将来如果您打算与第三方或您的另一个应用程序共享您的数据,您可以选择与内容提供商。

    2. 内容提供程序在所有 Android 版本中都是标准的,这也意味着您的应用程序是安全的。我很确定 ORMLite 也很稳定。但是你真的想冒这个风险吗,特别是如果这不能节省你的时间或者你没有任何业务需求这样做。 Android API 已经支离破碎,您还想在此基础上承担另一项工作吗?

    3. 如果您想将数据上传到云端,很容易与SyncAdapter集成

    4. 使用安卓安全和权限功能。

    您对处理 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
        }
    }
    

    如果没有 Content Provider,我本可以完成,而现在使用当前的要求可以正常工作,但我仍然选择这条路线。你可能会问为什么?

    • 异步操作
    • 轻松与平台/云集成。
    • 更少的代码更少的错误,所以更少的戏剧性(想想我是否必须实现我们刚刚讨论过的那些任务)

    而且,最好的部分来自任何活动,我可以简单地使用我的 DAO 访问数据库。

    或者,您可以直接从您的 DAO 访问 SQLLiteOpenHelper。

    归根结底,每个选择都取决于您的业务需求。如果您有很多持久性对象,ORMLite 可能是一个不错的选择。

    【讨论】:

      【解决方案2】:

      一方面我更喜欢使用 OrmLite 制作 ER 模型,另一方面 ContentProvider 提供了一些如上所述的好处。这就是我实现通用 ContentProvider 的原因,它允许访问 OrmLite ER 模型。这里是https://github.com/blandware/android-atleap

      【讨论】:

        【解决方案3】:

        【讨论】:

          【解决方案4】:

          我创建了一个您可以使用的 ORM 库,它基本上可以为您组合这两个用例,它被称为 CPOrm,它将满足您的需求。您可以使用它来管理数据库的创建和查询,一切都通过 android 内容提供程序完成。性能也不错,查询每秒返回 9000 多个结果。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多