博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android Pro] AsyncTaskLoader vs AsyncTask
阅读量:7048 次
发布时间:2019-06-28

本文共 2453 字,大约阅读时间需要 8 分钟。

reference to :

我看了一下asyncTask是从LV3开始,AsyncTaskLoader是从LV11开始的。

是不是说LV11以后,AsyncTaskLoader可以替代AsyncTask了?
还有,在开发里,异步加载的方法很多,普遍流行和最常用的是那种方法?
是不是如果想带有进度展示的话,那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://xlqal.baihongyu.com/

你可能感兴趣的文章
c# 的传递参数值传递与传递引用的区别,ref与out区别
查看>>
win7+vs2008+cuda5.x 环境配置二
查看>>
PHP5.5安装PHPRedis扩展
查看>>
c#Socket Tcp服务端编程
查看>>
java构造函数注意点
查看>>
Asp.net 中配置 CKEditor和CKFinder
查看>>
Use dynamic type in Entity Framework 4.1 SqlQuery() method
查看>>
《Python CookBook2》 第四章 Python技巧 - 若列表中某元素存在则返回之 && 在无须共享引用的条件下创建列表的列表...
查看>>
redhat网卡设置
查看>>
javascript 的作用域
查看>>
JFinal极速开发框架使用笔记(二) 两个问题,一个发现
查看>>
AutoCompleteTextView
查看>>
SecureCRT生成序列
查看>>
Android 应用程序主框架搭建
查看>>
2012腾讯春季实习生面试经历(二)
查看>>
用Bootstrap框架弹出iframe页面 在弹出的模态框中载人iframe页面,bootstrapiframe
查看>>
2012腾讯暑期实习面经(技术类web前端)
查看>>
第3种方法获取redis cluster主从关系
查看>>
注册表管理(本地、远程)
查看>>
《Linux内核设计与实现》第四周读书笔记——第五章
查看>>