zoukankan      html  css  js  c++  java
  • Loader

    阅读时有所疑惑的地方:

    • onLoadFinished到底啥时候调用?sdk上说是上一次的loader初始化完以后。
    • loader初始化以后,那几个回调函数调用顺序是什么?是每次都调用吗?每个回调函数都有其独特作用吧,需要在里面做对应的什么操作呢?

    Loader是从API 11开始才有的,也即3.0以上的版本才支持。出现的目的是为了能够更好的异步加载数据,也能更通用。那么他的好处有如下几点:

    • activity和fragment都可以用,通用性好;
    • 异步加载数据;
    • 能够监控源数据,当源数据发生变化的时候也做相应的变化;(这个自己试验过,调试API demos下的loaderCursor时,预先查询一个联系人,然后按主菜单键,把该联系人删掉,然后再打开loaderCursor,可看到相关的内容已经自动的发生改变,而onLoadFinshed等回调函数的等初始化查询的操作并没有执行)
    • 在配置发生改变,如横竖屏切换的时候,能够自动重新连接上次查询结果,而不需要重复再次查询。

    那么如何使用Loader来加载数据呢?使用Loader需要以下几个基本条件:

    • 有一个LoaderManager。每个activity或者fragment都有且只有一个LoaderManager,用来管理该activity或者fragment下的Loader实例;
    • 有一个Loader。实际加载数据的对象,常用的为CursorLoader,它继承自AsyncTaskLoader,可以异步加载数据;
    • 实现了LoaderManager.LoaderCallBacks接口,里面包括几个常用的回调函数,用来和activity或者fragment交互;
    • 展示loader加载出来的数据;
    • 数据源,例如ContentProvider或者Sqlite文件。

    一、初始化Loader

      Loader直接通过LoaderManager的init(id,args,LoaderCallBacksImpl)方法来实现,其中,id为loader的标识,它在调用init方法时,判断当前给定的id是否已经存在。若已存在,则使用之前的loader对象来加载数据;若未存在,则会触发回调函数:onCreateLoader,使得activity或者fragment创建一个Loader实例对象并返回。有个疑问,在init时,若id存在,则还会触发onLoadFinished方法吗?

    二、重新启动Loader

      LoaderManager的restartLoader方法,该方法执行完成以后,会触发onLoadFinished方法,通知client端获取查询的数据。也就说onLoadFinished方法是在loader加载完数据以后触发。

    三、LoaderManager的回调函数

      主要使用的回调函数包括以下三个:

    • onCreateLoader。 init方法调用以后根据id判断,是否需要加载该方法;
    • onLoadFinished。loader加载完数据以后触发;
    • onLoadRest。loader数据重置以后触发,客户端可以做相应数据清空操作。

    Loader由activity自己来管理,感觉使用起来比自己写一套要方便一些。

    更深一步的例子:LoaderThrottle,能够减少loader的查询次数,等研究完contentProvider后再来研究~~

    看不清未来,那就看脚下。
  • 相关阅读:
    浮起来的验证消息
    关于jQuery UI 使用心得及技巧
    如何制作好一个提交按扭我是个爱折腾的人
    ABAP自测试题一 沧海
    商务出现问题 沧海
    [转帖]Report painter 沧海
    准备ABAP认证 沧海
    Characteristics and Key figures In Report Painter 沧海
    有朋自远方来 沧海
    What are the layers of data description in R/3? 沧海
  • 原文地址:https://www.cnblogs.com/caiwan/p/2876206.html
Copyright © 2011-2022 走看看