- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LitePal 1.5.0 版本发布,你想要的都在这里
写在前面今天很高兴地告诉大家, LitePal 又出新版本
了!
其实我在 2012 年开始筹备做这个开源项目的时候,我自己也没想到会做多久,维护多久。现在回头想确实觉得蛮不可思议的,已经过去五年时间了,而我还在一直维护着这个项
目,不断开发着新功能,不断修复着 bug。前几天,群里的高叔问我是不是又在开发 LitePal 的新功能了, 我说是的, 你怎么知道?他说看到我刚刚在 GitHub 上又提交代码了。然后他发了一张截图给我: 他说他看到 LitePal 最早的提交记录已经是三年前了,真心佩服我能将一个项目维护三年之久,
他用过的很多开源项目都是很久之前就不再更新了。如果他没有截这张图,我自己都没意识到时间已经过去这么久了。确实,好像我这个人做事的风格就一贯如此。写博客也是,
从 2013 年 3 月开始写第一篇博客,到现在已经过去四年了,而我还在坚持写着。公众号也是,从去年五月份开始正式运营以来,一直保持着每个工作日一篇技术文章的推送,雷打
不动。好像我做什么事情, 只要认定是对的, 就会坚持下去。这应该是一种好的品质吧,也希望我未来能继续保持下去。
那么回到正题, LitePal 已经推出那么多个版本了,也是帮助了很多朋友解决了在 Android 上数据库开发的难题。在开发
过程中,也是感谢大家给了我很多的建议,这些建议使得我
能开发出更加好用的 LitePal 版本。而这次的 1.5.0 版本中,最主要的两大功能都是来自于大家给我的建议,下面就让我们一起来看一下 1.5.0 版本中到底有什么强大的功能吧。异
步操作数据库支持异步操作数据库是 LitePal 1.5.0 版本的核
心功能。在这之前, 使用 LitePal 操作数据库默认都是在主线程进行的,如果你想在子线程中进行数据库操作则需要自己创建线程才行。事实上, Android 官方是建议将所有的数据库操作都放在子线程中进行的。但是我们大多数情况下可能都不会这么做,因为数据库操作一般都很快,即使在主线程
中执行也基本不会影响到界面元素。因此, LitePal 之前的版
本中也是一直都没有加入异步操作数据库这个功能。但是凡事都有例外,如果你需要对大量的数据进行操作,比如从数据库中读取几千甚至上万条记录,这个时候如果还放在主线程中操作显然就不是一个明智的选择,因此异步操作数据库还是有它适用的场景的。也是听了很多朋友的建议,于是我开始设计异步操作数据库这个功能。在设计的时候,我要充分考虑到它的易用性,因为我希望可以让原本就已经了解
LitePal 用法的开发者们立即就能上手这个新功能, 而不需要
付出什么额外的学习成本。
经过了长时间的思考,我给 LitePal 中所有的 CRUD 方法都
加入了一个 Async 的副本方法。什么意思呢?比如说原来有
一个
find()
方法,现在就会多出一个
findAsycn()
方法,原来
有一个
save()方法,现在就会多出一个
saveAsync() 方法。如
果你想要进行异步数据库操作的时候,
只要去调用原
API
相
对应的 Async 副本方法就可以了。但是由于异步操作的内部
会开启线程,因此这类方法都是无法返回值的,那么异步操
作的结果就只能依靠回调来完成。 所以,我又给每一个 Async
副本方法的后面添加了一个 listen() 方法,专门用于监听异步
操作的结果。 那么,比如说我们想要将 Album 对象异步存储
到数据库当中,就可以这么写: Album album = new
Album();album.setName(album);album.setPrice(10.99f);album
.setCover(getCoverImageBytes());album.saveAsync().listen(ne
w SaveCallback() {
@Override public void onFinish(boolean success)
{}}); 使用上述写法,整个 Album 对象的 save 过程都会
在子线程中执行, 最终存储的结果会回调到 onFinish() 方法当
中。
当然,仅仅存储一条记录确实没有太大的必要去进行异步操
作,不过如果你要一次性存储 10000 条记录,那么就很有必
要这么写了: List albumList = new ArrayList(); for (int i = 0; i 10000; i++) {
Album album = new Album();
album.setName(getName()); album.setPrice(getPrice());
alb
文档评论(0)