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));