• LoaderManager与加载器的启动

    启动一个加载器
    服务器君一共花费 18.155 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    一个使用加载器的应用会典型的包含如下组件:

    • 一个Activity或Fragment.
    • 一个LoaderManager的实例.
    • 一个加载被ContentProvider所支持数据的CursorLoader.或者,你可以从Loader或AsyncTaskLoader实现你自己的加载器来从其它源加载数据.
    • 一个LoaderManager.LoaderCallbacks的实现.这是你创建新的装载器以及管理你的已有装载器的引用的地方.
    • 一个显示装载器的数据的途径,例如使用一个SimpleCursorAdapter.
    • 一个数据源,比如当是用CursorLoader时,它将是一个ContentProvider.

    从官网http://developer.android.com/reference/android/app/LoaderManager.html就可以看出它包含的方法有:

    initLoader是初始化一个加载器,它的第三个参数是一个LoaderCallbacks<D>接口,LoaderManager的initLoader是不做任何事情的,它只绑定了一个LoaderCallbacks,具体的创建Loader的事情是由这个callback来做的。

    LoaderCallbacks<D>接口需要实现的三个方法:

    在loader创建loader的时候会调用onCreateLoader,然后当load数据结束的时候(第一次读取数据或者数据有改变的时候load数据)会调用onLoadFinished,而onLoaderReset只有在destory一个loader的时候才有可能调用。

    所以一般创建数据Cursor(CursorLoader)的工作是在onCreateLoader中做,将CursorLoader返回,这样就创建了对这个数据源的监控,当数据源有数据变化的时候,就会自动调用了onLoadFinished函数了。

    启动一个加载器

    LoaderManager管理一个Activiry或Fragment中的一个或多个加载器.但每个activity或fragment只拥有一个LoaderManager.

    你通常要在activity的onCreate()方法中或fragment的onActivityCreated()方法中初始化一个加载器,你可以如下创建:

    // 准备加载器.可以重连一个已经存在的也可以启动一个新的.  
    getLoaderManager().initLoader(0,null, this);  
    

    initLoader()方法有以下参数:

    • 一个唯一ID来标志加载器.在这个例子中,ID是0。
    • 可选的参数,用于装载器初始化时(本例中是null)。
    • 一个LoaderManager.LoaderCallbacks的实现。被LoaderManager调用以报告装载器的事件,在这个例子中,类本实现了这个接口,所以传的是它自己:this。

    initLoader()保证一个装载器被初始化并激活.它具有两种可能的结果:

    • 如果ID所指的装载器已经存在,那么这个装载器将被重用.
    • 如果装载器不存在,initLoader()就触发LoaderManager.LoaderCallbacks的方法onCreateLoader()。这是你实例化并返回一个新装载器的地方。

    在这两种情况中,传入的LoaderManager.LoaderCallbacks的实现都与装载器绑定在一起,并且会在装载器状态变化时被调用。如果在调用这个方法时,调用者正处于启动状态,并且所请求的装载器已存在并产生了数据,那么系统会马上调用onLoadFinished()(也就是说在initLoader()还在执行时),所以你必须为这种情况的发生做好准备。

    注意initLoader()返回所创建的装载器,但是你不需保存一个对它的引用。LoaderManager自动管理装载器的生命,LoaderManager会在需要时开始和停止装载动作,并且维护装载器的状态和它所关联的内容。这意味着,你很少与加载器直接交互,你通常都是使用LoaderManager.LoaderCallbacks的方法们在某个事件发生时介入到数据加载的过程中。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [PHP程序设计] 声明式编程范式 12 个条目
  2. [Python程序设计] Python数据类型 11 个条目
  3. [JavaScript程序设计] 关于HTTP Keep-Alive 6 个条目
  4. [移动开发] Android View注入框架Butter Knife 3 个条目
  5. [计算机算法] 从双端队列引出的卡特兰数 3 个条目
  6. [移动开发] Content Provider内容提供者 3 个条目
  7. [移动开发] 简单了解Android Fragment 3 个条目
  8. [智力开发与知识管理] 超越整体性学习 5 个条目
  9. [计算机算法] TAOCP与算法 12 个条目
  10. [移动开发] Android与SQLite数据库 7 个条目
  11. [Python程序设计] Python语言概述 6 个条目
  12. [智力开发与知识管理] 信息的类型与结构 9 个条目
窗口 -- [博客]