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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

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