[Android Pro] AsyncTaskLoader vs AsyncTask
reference to : http://blog.csdn.net/a910626/article/details/45599133
我看了一下asyncTask是从LV3开始,AsyncTaskLoader是从LV11开始的。
是不是说LV11以后,AsyncTaskLoader可以替代AsyncTask了?
还有,在Android开发里,异步加载的方法很多,普遍流行和最常用的是那种方法?
是不是如果想带有进度展示的话,那AsyncTask是首选?
在statckOverflow里查了一下,说是 AsyncTaskLoader不需要写代码来处理activiy 配置(系统字体大小,orientation,输入设备类型等都叫做activity的配置)变化带来的影响,
但是缺点是加载时候不能解散掉进度框,不能 在onLoadFinished时切换fragment.单纯的从load data角度考虑,AsyncTaskLoader更合适。 If you need UI changes after data is loaded - AsyncTask might server you better, especially if you are working with fragments, but remember to handle activity configuration changes.
意思是说,你向数据加载完成之后ui改变,异步任务更适合,但是你需要写代码去处理activity的配置改变带来的影响。 AsyncTaskLoader是基于AsyncTask的
AsyncTaskLoader有一个优点,他不仅可以异步(通俗理解就是又开了一个线程而已),并且当他检测到数据的变化时会自动加载
google文档中关于Loader的说法:
Introduced in Android 3.0, loaders make it easy to asynchronously load
data in an activity or fragment. Loaders have these characteristics:
1、They are available to every Activity and Fragment. //支持Activity和Fragment
2、They provide asynchronous loading of data. //异步加载(就是异步任务来完成的)
3、They monitor the source of their data and deliver new results when the content changes. //当数据源改变时能及时通知客户端(自己特有的)
4、They automatically reconnect to the last loader’s cursor when being
recreated after a configuration change. Thus, they don’t need to
re-query their data. //发生configuration change时自动重连接(自己特有的)
Loader由什么组成?
总共有四个特性最终决定了一个Loader的行为:
执行异步载入的任务。为了确保在一个独立线程中执行载入操作,Loader的子类必须继承AsyncTaskLoader而不是 Loader类。AsyncTaskLoader是一个抽象Loader,它提供了一个AsyncTask来做它的执行操作。当定义子类时,通过实现抽象 方法loadInBackground方法来实现异步task。该方法将在一个工作线程中执行数据加载操作。
在一个注册监听器中接收载入完成返回的结果(见附注1)。对于每个Loader来说,LoaderManager注册一个 OnLoadCompleteListener,该对象将通过调用onLoadFinished(Loader loader, D result)方法使Loader将结果传送给客户端。Loader通过调用Loader#deliverResult(D result),将结果传递给已注册的监听器们。
三种不同状态(见附注2)。任何Loader将处于三种状态之中,已启动、已停止、重启:
a.
处于已启动状态的Loader会执行载入操作,并在任何时间将结果传递到监听器中。已启动的Loader将会监听数据改变,当检测到改变时执行新的载入。
一旦启动,Loader将一直处在已启动状态,一直到转换到已停止和重启。这是唯一一种onLoadFinished永远不会调用的状态。
b. 处于已停止状态的Loader将会继续监听数据改变,但是不会将结果返回给客户端。在已停止状态,Loader可能被启动或者重启。
c.
当Loader处于重启状态时,将不会执行新的载入操作,也不会发送新的结果集,也不会检测数据变化。当一个Loader进入重启状态,它必须解除对应的
数据引用,方便垃圾回收(同样地,客户端必须确定,在Loader无效之后,移除了所有该数据的引用)。通常,重启Loader不会两次调用;然而,在某
些情况下他们可能会启动,所以如果必要的话,它们必须能够适时重启。有一个观察者接受数据源改变的通知。Loader必须实现这些Observer其中之一(比如
ContentObserver,BroadcastReceiver等),来检测底层数据源的改变。当检测到数据改变,观察者必须调用
Loader#onContentChanged()。在该方法中执行两种不同操作:a.
如果Loader已经处于启动状态,就会执行一个新的载入操作; b.
设置一个flag标识数据源有改变,这样当Loader再次启动时,就知道应该重新载入数据了。
从以上我们大致就可以知道他们的区别所在了。
参考:
onConfigurationChanged的作用:http://www.cnblogs.com/lijunamneg/archive/2013/03/26/2982461.html
http://stackoverflow.com/questions/7120813/asynctaskloader-vs-asynctask
[Android Pro] AsyncTaskLoader vs AsyncTask的更多相关文章
- Android线程管理之AsyncTask异步任务
前言: 前面几篇文章主要学习了线程以及线程池的创建与使用,今天来学习一下AsyncTask异步任务,学习下AsyncTask到底解决了什么问题?然而它有什么弊端?正所谓知己知彼百战百胜嘛! 线程管理相 ...
- Java基础知识强化之网络编程笔记15:Android网络通信之 Android异步任务处理(AsyncTask使用)
AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的 ...
- [Android Pro] Android异步任务处理之AsyncTaskLoader的使用
reference to : http://blog.csdn.net/happy_horse/article/details/51518280 最近项目中涉及到加载本地的地名.db文件,数据量大,自 ...
- Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案
的最佳方案 标签: Android屏幕旋转AsyncTaskProgressDialog 2014-07-19 09:25 39227人阅读 评论(46) 收藏 举报 分类: [android 进阶之 ...
- Android多线程编程之AsyncTask
进程?线程? 进程是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态的概念.每个进程都有自己的地址空间(进程空间).进程空间的大小与处理机位数有关.进程至少有5种基本状态:初始态,执行态 ...
- [Android Pro] Gradle Tips#2-语法
referece to : http://blog.csdn.net/lzyzsd/article/details/46935063 在第一篇博客中,我讲解了关于tasks和构建过程中task的不同阶 ...
- Android中异步类AsyncTask的理解
这里有两种解释的方法,各有侧重点: 第一种解释: Async Task 简介:AsyncTask的特点是任务在主线程之外运行,而回调方法是在主线程中执行,这就有效地避免了使用Handler带来的麻烦 ...
- android开发之路12(android四大组件&Fragment&AsyncTask类)
一.Activity组件1.简介:Activity组件是Android四大组件之一,通常一个Activity相当于一个用户界面,我们可以通过加载布局文件将Android提供的各种控件及自定义控件显示到 ...
- Android(java)学习笔记149:Android线程形态之 AsyncTask (异步任务)
1. AsyncTask和Handler的优缺点比较: 1)AsyncTask实现的原理和适用的优缺点 AsyncTask是Android提供的轻量级的异步类,可以直接继承AsyncTa ...
随机推荐
- DirectWrite 模糊问题——如何正确根据DIP计算实际像素
使用Windows.Graphics.Display.DisplayInformation的时候,一定要根据RawPixelsPerViewPixel计算,而不是RawDpiX或RawDpiY,或许L ...
- ElasticSearch中bulkProcesser使用
初次接触es,可能对增删改查很熟悉,以为能为得心应手,本次应用场景为 数据库变更一条记录,会触发更新es中的数据,每秒并发大概30条左右,测试环境一切工作正常(数据量较少),上线后发现日志中很多类似于 ...
- Jackson 通过自定义注解来控制json key的格式
Jackson 通过自定义注解来控制json key的格式 最近我这边有一个需求就是需要把Bean中的某一些特殊字段的值进行替换.而这个替换过程是需要依赖一个第三方的dubbo服务的.为了使得这个转换 ...
- Beta阶段第六次Scrum Meeting
情况简述 BETA阶段第六次Scrum Meeting 敏捷开发起始时间 2016/12/16 00:00 敏捷开发终止时间 2016/12/17 00:00 会议基本内容摘要 平稳推进 参与讨论人员 ...
- [bigdata] 从Cloudera Manager中彻底删除服务器
1. 在CM中主机页里,选定要删除的服务器,选择操作“从群集中删除”. 2. 登录到主机,执行chkconfig,显示有cloudera-scm-agent服务, 执行service cloudera ...
- log4j分离日志输出 自定义过滤 自定义日志文件
普通的log4j.properties 定义: ### set log levels ### log4j.rootLogger = debug,D,E ## Disable other log log ...
- linux 下第一个Libevent代码学习
#include <event.h> struct event ev; struct timeval tv; void time_cb(int fd, short event, void* ...
- InputStream、InputStreamReader和Reader的关系
InputStream:得到的是字节输入流,InputStream.read("filename")之后,得到字节流 Reader:读取的是字符流 InputStreamReade ...
- websocket的介绍
偶然在知乎上看到一篇回帖,瞬间觉得之前看的那么多资料都不及这一篇回帖让我对 websocket 的认识深刻有木有.所以转到我博客里,分享一下.比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗 ...
- linux大文件分割 split命令
inux split 命令 功能说明:切割文件. 语 法:split [--help][--version][-][-b ][-C ][-l ][要切割的文件][输出文件名] 补充说明:split可将 ...