一, 数据访问的常用模式

大家都知道在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

更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android(安卓)- 分享内容 - 给其他APP发送内容
  5. 【Android每日一讲】2012.11.01 程序加载中,请稍后 - ProgressDia
  6. Android(安卓)系统属性
  7. Android(安卓)9.0 AudioRecord代码分析
  8. 一个 android和js 数据交互的问题
  9. (一)基于android平台的智能家居控制系统之 android客户端篇

随机推荐

  1. Android——intent分享图片到微信好友、
  2. android的ImageSwitcher和TextSwitcher
  3. android 自定义 radiobutton 文字颜色随
  4. Android 海贼王连连看游戏源码
  5. Android 解析imei
  6. Android Material Design常规使用
  7. android 测试
  8. 【Android】选项卡使用
  9. Android(安卓)webview HitTestResult识别
  10. Android Launcher3去除应用列表,二级菜单,