• 为什么需要加载器Loaders?

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

    加载器(也称装载器)从 android 3.0 开始引进的。它使得在activity或fragment中异步加载数据变得简单。加载器具有如下特性:

    • 它们对每个Activity和Fragment都有效。
    • 他们提供了异步加载数据的能力。
    • 它们监视数据源的一将一动并在内容改变时传送新的结果。
    • 当由于配置改变而被重新创建后,它们自动重连到上一个加载器的游标,所以不必重新查询数据。

    那么为什么会出现加载器呢?它的出现解决了什么问题?

    首先Activity是我们的前端展现,数据库是我们的数据持久化地址,那么正常的逻辑就是在展示页面的渲染页面的阶段进行数据库查询。拿到数据以后才展示页面。

    但是这个逻辑有一些缺点:

    首先是查询数据的逻辑放在了UI生成的同个线程中,这个就意味着在查询数据的时候,UI页面生成的工作被阻塞住了。UI一旦被阻塞用户就会被感知出来了,因此就会出现各种无相应页面(Application Not Response),或者activity页面延迟的现象,这对用户体验来说是很难接受的。

    其次是在渲染页面的时候需要固定进行一次(或多次)数据查询,这个是很不节省资源的。假如一个Activity从一个停止状态回到前台,那么这个时候尽管数据并没有变化,但是也需要进行一次query操作。在浪费资源的同时也再次增加了页面渲染失败的风险。

    还有就是当数据变化的时候如何通知页面进行修改呢?这个时候往往就又要创建一个monitor的角色,来当数据源变化的时候来让页面重新调用requery。

    因此在Android的越来越提倡用户体验的今天,加载器和加载管理器(Loader,LoaderManager)就出现了。

    Loader的作用

    简单来说,Loader做了下面两个事情:

    • 在单独的线程中读取数据
    • 监视数据的更新

    而LoaderManager就是加载器的管理器,一个LoaderManager可以管理一个或多个Loader,一个Activity或者Fragment只能有一个LoadManager。LoaderManager管理Loader的初始化,重启和销毁操作。

    加载器API概述

    在使用装载器时,会涉及很多类和接口们,我们在下表中对它们总结一下:

    Class/Interface 说明
    LoaderManager 一个抽像类,关联到一个Activity或Fragment,管理一个或多个装载器的实例。这帮助一个应用管理那些与Activity或Fragment的生命周期相关的长时间运行的的操作。最常见的方式是与一个CursorLoader一起使用,然而应用是可以随便写它们自己的装载器以加载其它类型的数据。 每个activity或fragment只有一个LoaderManager。但是一个LoaderManager可以拥有多个装载器。
    LoaderManager.LoaderCallbacks 一个用于客户端与LoaderManager交互的回调接口。例如,你使用回调方法onCreateLoader()来创建一个新的装载器。
    Loader(装载器) 一个执行异步数据加载的抽象类。它是加载器的基类。你可以使用典型的CursorLoader,但是你也可以实现你自己的子类。一旦装载器被激活,它们将监视它们的数据源并且在数据改变时发送新的结果。
    AsyncTaskLoader 提供一个AsyncTask来执行异步加载工作的抽象类。
    CursorLoader AsyncTaskLoader的子类,它查询ContentResolver然后返回一个Cursor。这个类为查询cursor以标准的方式实现了装载器的协议,它的游标查询是通过AsyncTaskLoader在后台线程中执行,从而不会阻塞界面。使用这个装载器是从一个ContentProvider异步加载数据的最好方式。相比之下,通过fragment或activity的API来执行一个被管理的查询就不行了。

    上面所列的类和接口们是你在你的应用中要实现加载器时的核心组件。你的每个装载器并不一定需要所有的组件,但是你总是需要引用LoaderManager来初始化一个加载器。后面的章节将向你展示如何使用这些类和接口们。

更多 推荐条目

Welcome to NowaMagic Academy!

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

本章最新发布
随机专题
  1. [PHP程序设计] PHP中的Hash算法 3 个条目
  2. [软件工程与项目管理] 呈现器的布局与绘制 11 个条目
  3. [PHP程序设计] PHP与函数式编程 1 个条目
  4. [Python程序设计] Python数据类型 11 个条目
  5. [PHP程序设计] 命令式编程范式 6 个条目
  6. [PHP程序设计] PHP扩展模块安装 1 个条目
  7. [智力开发与知识管理] 整体性学习步骤 9 个条目
  8. [数据库技术] 无限级分类数据表设计 4 个条目
  9. [软件工程与项目管理] 了解一点WebKit 9 个条目
  10. [Python程序设计] Tornado背景知识介绍 4 个条目
  11. [Python程序设计] 写几个简单的Tornado程序吧 5 个条目
  12. [PHP程序设计] PHP数组探索 4 个条目
窗口 -- [博客]