文章结束给大家来个程序员笑话:[M]

工作内容会合到Contact模块,这个应用查询数据的地方很多,其应用了CursorLoader这个工具大大简化了代码复杂度。android自3.0提供了Loader机制,当时google的API只是简单的介绍了一下没有给出用法,大家很少有关注。后来因为重度模型下的性能优化,R&D的朋友发现这个货色非常给力,这才开始注意到这个壮大的工具。CursorLoader是Loader的子类,可以说是Loader的升级版。这篇小结以loader为基础说明,弄懂道理以后也就明白了CursorLoader。
先说说google官方对Loader的介绍Loader对activity和fragment可用;Loader可以移步加载数据;loader自己会监视数据源的变化并且会主动上报;当发生配置上的变化,重新生成的loader会主动连接到变化前的cursor,这样就防止再查一次数据库。咱自己在弥补一个,loader能在应用不应用查询到的资源时候,主动将其释放。这些介绍自android3.0以后,就能够从官方文档山看到。当时依据这些并不知道怎么样应用,看了framework侧的实现以后还是一头雾水:咋用。当初来看这就像activity一样,我们可以不知道framework中怎么样开始一个activity怎么样管理activity但是我们仍然能很好的应用activity;对于CursorLoader,我们大可以不必知道framework中的道理,只要利用好google提供的接口LoaderManager以及为其注册事件的接口LoaderManager.LoaderCallbacks就能够实现我们须要的功能。
实际上CursorLoader完全可以当作一个很牛的查询工具,具有一般的查询不具备的能力,如上面的google官方介绍。我们通过LoaderManager.LoaderCallbacks接口来在恰当的时候提供查询配置或者利用查询返回到的结果。应用好CursorLoader重在实现好LoaderManager.LoaderCallbacks接口。看下这个接口里面提供了哪些方法:

public interface LoaderCallbacks<D> {        public Loader<D> onCreateLoader(int id, Bundle args);        public void onLoadFinished(Loader<D> loader, D data);        public void onLoaderReset(Loader<D> loader);    }
每日一道理
自己把自己说服了,是一种理智的胜利;自己被自己感动了,是一种心灵的升华;自己把自己征服了,是一种人生的成功。

第一个方法onCreateLoader是创建Loader时候调用,是为了提供查询的配置,比如查询地址,查询项目等。这个方法会在loader初始化也就是注册这个接口的时候调用,常见代码如下:

getLoaderManager().initLoader(0, null, this);

第一个参数是当前activity里面loader的ID,一般为0,第二个参数一般置null,第三个就是实现了LoaderManager.LoaderCallbacks的类,一般就是当前activity。这句代码执行以后就会执行onCreateLoader,然后去查询,查询结束以后就会执行onLoadFinished,做你须要做的事件。一般就在第二个方法里面利用查询结果,如传递到一个adapter进行显示。第三个方法onLoaderReset是在我们的配置发生变化的,应用restartLoader(int , Bundle ,LoaderManager.LoaderCallbacks<D>)方法重新初始化loader以后调用的,一般是用来释放对后面loader查询到的结果引用。对Loader的应用只须要在重新初始化之前去除引用,退出activity时候不须要关闭cursor释放资源。
到这里loader的用法就已经说完了,记着上面三个方法的用途,在恰当的地方初始化loader,我们就能够利用Loader实现我们的须要。当初说说Loader和CursorLoader的关系:Loader是核心,其已经实现了基本功能;AsyncTaskLoader继承自Loader,主要任务就是将耗时操纵从主线程中剥离出来;CursorLoader继承自AsyncTaskLoader,是泛型类的一个详细类,也是我们最经常使用Loader。
Loader的到来给android应用开发带来了很大的便利。在数据加载的性能优化中有一项分布加载,没有Loader之前,我们须要将查询实当初AsyncQueryHandler类里面,在其onQueryComplete回调方法里面触发后续查询。上面这些须要自定义一个内部类,一堆代码,搞得晕乎乎的。%>_<% 用来Loader只要在onLoadFinished里面增加一些判断即可,很便利。

文章结束给大家分享下程序员的一些笑话语录: 手机终究会变成PC,所以ip会比wm更加畅销,但是有一天手机强大到一定程度了就会发现只有wm的支持才能完美享受。就好比树和草,草长得再高也是草,时间到了条件成熟了树就会窜天高了。www.ishuo.cn

更多相关文章

  1. Android的搜索框架实例详解
  2. Android(安卓)AIDL实例解析
  3. android开发之多线程实现方法概述
  4. 第三部分:Android(安卓)应用程序接口指南---第二节:UI---第十一章
  5. Android(安卓)--调启百度地图
  6. Android(安卓)WebView和JS交互详细教程
  7. [置顶] Android开发-分析ViewGroup、View的事件分发机制、结合职
  8. Android上HDMI介绍(基于高通平台)-- Overlay
  9. android Intent 和 intent action 大全

随机推荐

  1. 本科畢業論文——基於Android平臺的零售
  2. 对Android中RecyclerView多选删除的一些
  3. Android(安卓)后台线程及CPU占用
  4. android如何在xml中引用内部类的View
  5. android Ble4.0蓝牙开发之搜索慢、startL
  6. Android两个apk源码进行整合
  7. 赏析 WIMM 可佩戴式平台,很帅很强大
  8. Android属性动画,看完这篇够用了吧
  9. Android(安卓)桌面组件【app widget】 进
  10. Android(安卓)多主题切换 (theme + style