Green DAO与ORM Lite与Active Android之间的比较

60

哪个ORM工具是Android最好的?

我发现ORMlite和ActiveAndroid是最常被讨论的,我的一个朋友建议我使用GreenDAO。因此我正在寻找一些知识资源来帮助我做出决策。

我想要判断的功能包括免费提供(开源),文档良好,活跃的论坛,稳定版本可用等,这些都是开发人员所需的。


4
GreenDao很容易使用,但它有其限制,例如不能配置缓存,与ORMLite的缓存相反,并不是一个真正的ORM。我将解释我的答案,在ORMLite中,您可以以某种方式配置缓存,以使查询可能无需访问数据库,而在GreenDao中则不可能,每个查询都指向数据库。 - Nativ
感谢您提出这个问题。 - necromancer
另一个需要考虑的因素是Android架构。ORMLite让你扩展一个activity,这可能与某些架构不兼容。 - stevebot
@stevebot,不,当您使用ORMLite时,我不需要扩展Activity。 - cVoronin
3个回答

23

我建议使用ORMlite,它是一款开源免费软件,文档齐全,支持Java和Android。它有良好的开发者支持,并且许多应用程序正在使用ORMlite(包括我自己开发的应用)。

请查看这个比较 ORMLite 和Green DAO的参考资料。


2
谢谢您的回复,但在那个比较中我没有看到ORMLite和GreenDAO有任何主要区别。我能找到的是GreenDAO表现更好,但ORMLite更受欢迎。仍在努力了解为什么ORMLite比表现更好的GreenDAO更受欢迎。 - Ravi G
1
添加链接以支持上述评论:https://dev59.com/D2bWa4cB1Zd3GeqPUj_3 http://greendao-orm.com/features/ - Ravi G
4
关于比较……我不理解使用 JAR 文件大小作为衡量库“重量”的指标。一个库可能有很多额外的可选功能,在大多数项目中被剔除掉。我认为需要构建每个库的基本项目,并检查发布版本构建的 APK 大小变化。 - Tom
还有其他库的基准比较,例如SugarOrm吗? - android developer
6
我一两年前在寻找适用于Android的好的ORM时,发现了这篇文章,它让我使用ORMLite了一段时间,但我现在对此感到后悔。ORMLite并不是为Android写得很好。如果你查看基准测试结果,即使在最新的Android操作系统上,它也比其他ORM(如GreenDAO)慢几个数量级。这是因为ORMLite在所有方面都严重依赖反射,并且非常缓慢,因为它创建了大量需要进行垃圾回收的对象。在Android中进行垃圾回收会导致UI变得卡顿。我建议您在其他ORM上投入时间。 - spierce7
显示剩余2条评论

11

ORMLite 和 GreenDAO 的一个区别是注释的使用。ORMLite 使用注释,而 GreenDAO 不使用,如此处所述 (参见)

ORMLite 使用的注释依赖反射,这可能会对性能产生负面影响,特别是在较慢的 Android 设备上。有趣的是,比较 ORMLite 和 GreenDAO 的基准测试。


16
在Android上使用ORMLite可以使用编译时生成的配置文件,在应用程序使用过程中完全避免依赖反射。对我来说,使用注释很重要,因为可以使用现有的模型对象。 - Rafael Nobre
1
这里有一个 Github 项目,它比较了 ORMLite 和 GreenDao 与原始 SQLite 的性能:https://github.com/littleinc/android-orm-benchmark - Diego Palomar
1
注解不依赖于反射。使用注解的库可能会依赖于反射。AndroidAnnotations、Dagger 2、Retrofit、ButterKnife、LoganSquare、Gson、Wire等是使用注解处理器的库的示例,它们在编译时生成样板代码,完全不使用反射。 - Louis CAD
ORMLite使用的注释是指在这种情况下使用的,而不是一般的注释。我会更新答案以使其更明确。 - Philipp
对于通过谷歌搜索到这里的人:此信息已过时,GreenDAO自2016年7月发布的版本3开始支持注释。 - TiEul

5
我遇到的问题之一是使用的许多库都要求在android.app.Application.onCreate()中进行初始化。我希望这些库允许我在辅助线程、服务或在完成用户界面后进行初始化。
我认为Active Android存在这个“问题”,而ORMLite则没有。关于GreenDAO我不确定。
是否真正成为问题取决于你的应用程序,但我注意到onCreate ()的文档说:“实现应尽可能快(例如使用状态的惰性初始化),因为在进程中启动第一个活动、服务或接收器所花费的时间直接影响其性能。”
与此无关的是,我注意到ActiveAndroid和ORMlite一样使用注释,但GreenDAO不同,它使用代码生成。

Sugar ORM相对较轻,另一方面不会出现这个问题。如果需要,您可以从服务内部执行操作。 - C--
JDXA ORM for Android 提供了在应用程序生命周期的任何时候进行初始化的灵活性。JDXA 遵循 ORM 的 KISS 原则。JDXA 不使用注释。它完全不会干扰您的领域对象模型 - 没有必要从任何基类进行子类化;也不需要 DAO 类。 - Damodar Periwal
@DamodarPeriwal 我需要填写一个表格才能获得它吗?不用了,谢谢。 - TheRealChx101

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接