Android Loader 机制浅谈

一, 数据访问的常用模式

大家都知道在android里访问数据,以及一些耗时的操作是不能放在主线程去做的,所以我们都知道使用异步的。有关异步加载数据常用的有以下几种

备注: 以上我是总结出来目前市场上常用的异步加载处理模式。

二, Android Loader的优点

Android Loader简介:

Android的装载器(loader)是从Android 3.0新引入的API , 主要完成单线程耗时数据异步装载功能,并在数据有更新自动通知UI刷新的作用。业内也叫加载器,装载机,Loader一般用在Activity和fragment异步加载数据,无需重新启动一个线程来执行数据加载,异步加载可以用asyncTask 但是loader自带数据结果监听机制,可以进行UI更新。

官方介绍:

A class that performs asynchronous loading of data. While Loaders are active they should monitor the source of their data and deliver new results when the contents change. SeeLoaderManagerfor more detail.

Android Loader 优点:

适用于任何Activity和Fragment;

提供了异步加载数据的机制;

检测数据源,当数据源内容改变时它们能够传递新的结果;

当配置改变后需要重新创建时,它们会重新连接到最后一个loader的游标。这样,它们不需要重新查询它们的数据。

在Activity配置发生变化(如横竖屏切换)>时不用重复加载数据

三, Android Loader架构

Loader

只是一个实例,一个执行体。他依赖于loaderManager的管理。LoaderManager担起对loader的管理,肩负起fragement

和activity之间如何在loader之间贯穿起来。有人说LoaderManager是一个抽象类,里面定义了各种方法。而官方文档则称

LoaderMagaer是一个接口。其实不去在意这些定义。我们明显可以感觉到。Loader的创建,使用,销毁肯定都是LoaderManager去

定义的。一个LoaderManager可以管理多个loader。另外,loader的实现不会自己去实现而是委托自己的子类去实现。

AsyncTaskLoader 和 CursorLoader

四,AsyncTaskLoader 详解

AsyncTaskLoader是loader的一个子类。是一个抽象类。提供了AsyncTask。

Publick的方法如下图:

更多:https://developer.android.com/reference/android/content/AsyncTaskLoader.html

五,AsyncTaskLoader Demo

以获取当前手机安装成功的app为例,讲关键代码:

新建一个loader继承AsyncTaskLoader:

把loader传给app的实体类通过构造函数把loader拿到然后获取app的icon:


在自己创建的appadapter里面设置需要的icon和label

说明:demo是基于官方写的,完美体现了AsyncTaskLoader的加载和及时刷新的效果。可以卸载一个程序,demo会立马自己刷新数据展现。

AppListFragment会实现loader的callback接口实现onLoaderReset方法刷新页面数据。有需要的可以私我要完整demo

Demo效果:

六,CursorLoader 详解

CursorLoader又是AysncTaskLoader的一个子类。查询ContentResolve并且返回一个Cursor。可以说CursorLoader

是一个很牛的查询工具。以一种标准的方式实现了loader的接口。

相对于AysncTaskLoader的实例demo简单些,只是对手机通讯录做个查询展现:

查询耗时的操作直接放到onLoadInBackground方法里做但是这里只是返回了一个cursor。处理要onLoadFinish里做:

说明:同样如果有删除,更新操作会在onLoaderReset里面实现。具体demo可以私下找我要

网上有很多关于loader的资料,本人只建议去看官网,官网更全面:

https://developer.android.com/reference/android/content/Loader.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,641评论 25 709
  • Android开发者都经历过APP UI开发不当 会造成overDraw,导致APP UI渲染过慢,但是很多人却没...
    Tamic阅读 16,092评论 30 104
  • 1 背景## 在Android中任何耗时的操作都不能放在UI主线程中,所以耗时的操作都需要使用异步实现。同样的,在...
    我是昵称阅读 4,990评论 0 3
  • PHP视频教程全集下载-PHP视频教程排行以及深度解析: 带领我们一起走进PHP的世界。 PHP是世界上最好的编程...
    dagailv阅读 1,885评论 0 0
  • 敏感度是生活的细节。“伟大的头脑谈论想法,中等的头脑谈论事件,弱小的头脑谈论人
    92新元阅读 3,085评论 0 0