18 Loader 总结

    xiaoxiao2022-06-28  36

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

    Loader特点:

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

    使用:

    初始化Loader initLoader(编号,查询条件,回调接口);实现回调接口 实现三个方法 在三个方法里做相应的动作 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));
    转载请注明原文地址: https://ju.6miu.com/read-1124399.html

    最新回复(0)