Android ORM 和 ContentProvider对比

来源:互联网 发布:朝阳群众知乎 编辑:程序博客网 时间:2024/05/16 10:53

对于数据库操作大家有时候在犹豫到底该用ContentProvider或者DataBase ORM。
我在这简单的对比一下。可能由于自己的水平有限。可能有错误的地方希望大家指出!谢谢!



ContentProvider优势
1、如果你想把你的数据跟其他进程、程序共享。就要用android提供的contentProvider接口来做。
2、ContentProvider是Android提供的一个贯穿各个模块的通信接口,通信模式。有各种权限机制。可以有更高安全性。 数据访问是通过URI模式访问。返回Cursor数据。这个模式在SearchView,CursorLoader,CursorAdapter,云同步AsyncAdapter等地方用到了。不用ContentProvider这些要手动去实现。
3、ContentObserver模型。当数据发生改变的时候去通知某个URI 该数据发生改变。实时的一个监听效果。


ContentProvider缺陷
1、如果结构不好。dataBase的数据表项发生改变。需要重写很多代码。(借鉴android系统的方式,比如contactProvider等)每张表单独写出表项。这样重构会减少这个缺点。但是相对代码量比较大。
2、速度会比较慢一点。因为uri机制。getContentResolver()会先去系统查找一遍。这个查询过程是缓慢一点,性能受影响不大。



ORM
比较广泛ORM ORMLite,GreenDao,androm等。
最受关注的就是ORMLite 和 GreenDao 
ORMLite:http://www.appbrain.com/stats/libraries/details/ormlite/ormlite
GreenDao:http://www.appbrain.com/stats/libraries/details/greendao/greendao





ORM的优势:
1、代码可以写得很少。CURD的支持完善。外键创建也比较方便。相对于ContentProvider代码少很对,很方便维护。
2、速度快,尤其是在大量数据实例化的时候。
虽然ContentProvider有ContentProviderClient.applyBatch(ArrayList<ContentProviderOperation> operations)的批量执行方法。但是还有有差距。


ORM的缺点就是不具备ContentProvider的android生态系统内的组件支持。

ORMLite和GreenDao对比:
GreenDao和ORMLite在CURD的操作上是相似的。 只是初始化不同。
因为GreenDao是通过代码设置数据库table的属性。而ORMLite是通过注解的方式,也就是反射的方式执行。
所以ORMLite 代码更简洁。GreenDao相对而言复杂一点。 因为ORMLite是反射机制会变慢一些,jar的体积也要大一些。


总结:就是根据不同的需求选择不同的解决方案。

混合解决方案:
ORM和ContentProvider 有人就像结合到一起用。 
但是这2个方案不能同时使用。因为Database的连接一般是单例模型。不然出错率很高。

看看Git给出的解决方案:https://github.com/jakenjarvis/Android-OrmLiteContentProvider


对于这3种的简单实现,并且性能对比:http://blog.csdn.net/u012565107/article/details/21546829
0 0