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