18 Loader 总结

这里写图片描述
1. Loader 装载器 Android3.0以后出来的 它可以使Activity和Fragment 异步加载数据 变得简单(Loader里封装了AsyncTask)

  1. Loader特点:

    1,对每一个Activity或者Fragment有效
    2,提供异步加载数据的机制
    3,监测数据源的变化 ,并对变化返回新的结果
    4,由于配置发生改变 重新创建Loader时 他会自动链接上一个加载器游标,不会重新查询数据

  2. 使用:

    1. 初始化Loader initLoader(编号,查询条件,回调接口);
    2. 实现回调接口 实现三个方法
    3. 在三个方法里做相应的动作
      onCreateLoader(){
      //创建Loader对象 返回Loader
      }

    onLoadFinished{
    //加载数据
    }

    onLoaderReset(){
    //清除数据
    }

    CursorLoader:包含了观察者

    一般和ContentResolver一起使用 加载ContentProvider暴漏出的数据
    通过 Uri设置ContentObserver,检测数据源的变化
    继承与AsyncTaskLoader<>

    AsyncTaskLoader: 自己自定义Loader

    onStartLoading{
    执行在主线程
    forceLoad();//必须执行 强制向下执行

    }
    loadInBackground(){
    //加载数据
    }

    观察者:时刻检测数据的变化

    /**

    • 自定义的观察者
    • @author sxy
      *
      */
      class MyContentObserver extends ContentObserver{

      public MyContentObserver(Handler handler) {
      super(handler);
      // TODO Auto-generated constructor stub
      }

      //当你的数据发生改变时 调用此方法
      @Override
      public void onChange(boolean selfChange) {
      // TODO Auto-generated method stub
      super.onChange(selfChange);
      //重启Loader
      getLoaderManager().restartLoader(1, null, MainActivity.this);
      }

    }

    注册观察者:

        /**
     * 注册观察者对象    给当前Uri
     * 参数1:Uri对象
     * 参数2:   如果返回true    检测到 content:sms    content:sms/address   content:sms/address/iii
     *        如果返回false    只能检测到当前的content:sms    
     *        
     * 参数3:观察者
     * 
     */
    getContentResolver().registerContentObserver(
            Uri.parse("content://sms"), true, new MyContentObserver(null));
    

posted on 2016-09-14 12:06  木鱼哥  阅读(145)  评论(0编辑  收藏  举报

导航