1. 在statckOverflow里查了一下,说是 AsyncTaskLoader不需要写代码来处理activiy 配置(系统字体大小,orientation,输入设备类型等都叫做activity的配置)变化带来的影响,但是缺点是加载时候不能解散掉进度框,不能在onLoadFinished时切换fragment.单纯的从load data 
    角度考虑,AsyncTaskLoader更合适。

  2. 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的配置改变带来的影响。

  3. 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时自动重连接(自己特有的)

  4. 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再次启动时,就知道应该重新载入数据了。

从以上我们大致就可以知道他们的区别所在了。

关于loader asyncTaskLoader AsyncTask的理解相关推荐

  1. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

    前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...

  2. AsyncTask的理解

    AsyncTask是集成了后台执行任务,更新进度,处理结果的工具,开发者在使用时无需关注子线程与主线程通信的问题. public class HandlerActivity extends Activ ...

  3. 基于matlab的pcm系统仿真_深入理解基于RISC-V ISS Spike的仿真系统:探索Spike,pk和fesrv...

    Spike, the RISC-V ISA Simulator, implements a functional model of one or more RISC-V processors. Spi ...

  4. 预处理器loader总结

    Time: 20191005 预处理器的作用 前端工程涉及到的资源,除了JS还有很多其他内容: HTML CSS 模板 图片 字体 - 我们前面都是在围绕着JS的打包问题在学习Webpack. 现在我 ...

  5. webpack加载css样式 ----css相关loader

    一.什么是loader? webpack 只能理解 JavaScript 和 JSON 文件,这是 webpack 开箱可用的自带能力. loader 让 webpack 能够去处理其他类型的文件,并 ...

  6. Android异步编程

    目录: Android的线程和内存模型 AsyncTask 碎片化问题 Activity生命周期问题 Handler & HandlerThread Looper Loader AsyncTa ...

  7. Android MVP伴侣,Nucleus框架使用简介

    Neclues是一款基于MVP框架的Android Library, 它合理地将程序中的可视化界面和后台线程联系起来. 如果你还不了解MVP框架,请点击查看详情 框架介绍 我们在应用中使用MVP和Rx ...

  8. Android 自定义线程池的实战

    前言:在上一篇文章中我们讲到了AsyncTask的基本使用.AsyncTask的封装.AsyncTask 的串行/并行线程队列.自定义线程池.线程池的快速创建方式. 对线程池不了解的同学可以先看 An ...

  9. Android 从零开始打造异步处理框架

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/52847872 本文出自[赵彦军的博客] 概述 封装尝试 Handler优化 线程优 ...

最新文章

  1. 倪光南院士:openEuler与全球开发者共同推动计算产业发展
  2. 英特尔支持员工自带设备办公
  3. C/C++产生随机数
  4. C语言通过函数参数不能带出动态内存的例子。
  5. 【MySQL】 批量修改数据表和数据表中所有字段的字符集
  6. YTU 1009: University
  7. pythonzip是迭代器_Python迭代器和zip
  8. C语言中生成可执行程序的过程
  9. linux安装mathematica7,Linux下面如何安装maple,mathematica,matlab这类软件?
  10. 线性回归的简洁实现(pytorch框架)
  11. Bootstrap采样方法的python实现
  12. 波形信号发生器设计 Proteus仿真--输出频率可调的正弦波、三角波、方波
  13. 考研清华985信号与系统参考书籍(郑君里)重点
  14. CANape CAN工程的创建
  15. 谈一下为什么程序员不要进外包吧
  16. 使用MQTTX 建立连接报Error: Connection refused: Not authorized 未授权
  17. matlab motor,MATLAB在电机仿真中的应用 Application of MATLAB in motor simulation.pdf
  18. vue实现select下拉显示隐藏功能【详细功能拓展】
  19. IO流-节点流和处理流(涵盖底层调用关系)
  20. 个人收藏的一些资源网站

热门文章

  1. 将用户数据分成一个个数据块传输的优点不包括( )
  2. Django 模型字段 —— ImageField
  3. 【机器视觉】 endfor算子
  4. 【机器视觉】 Halcon代码导出高级语言代码
  5. 【Tools】XMind8安装教程详解
  6. 【Linux】一步一步学Linux——ssh-agent命令(181)
  7. 【Tools】StarUML2.8工具安装和破解
  8. javascript经典实例_JavaScript 经典实例收集整理
  9. jira使用教程pdf_需要申请项目?需要开通权限?需要创建流程?刚需教程安排上了!...
  10. 很多字段的数据要插入另一张表_一文看懂数据库设计之逻辑设计,值得收藏