Loaders 中文意思加载器
Loaders在Android 3.0中引入的,加载器使它容易异步加载数据 在一个Activity或Fragment。
特点:
注:在一个Activity、Fragment中,只有一个LoaderManager实例,但是每一个Activity可以有多个Fragment,所以说一个Activity只有一个LaoderManager实例是不准确的。
常用的类和接口:
LoaderManager:这是一个抽象类,关联在Activity、Fragment上,管理一个或多个Loader,帮助app管理耗时操作在Activity、Fragment的生命周期过程中。最常和 CursorLoader一块使用。每一个Activity或Fragment只有一个FragmentManager对象。一个FragmentManager可以管理多个Loader
LoaderManager.LoaderCallbacks:和LoaderManger关联在一起的回调接口。onCreateLoader()会调方法,创建Loader对象。
Loader: 抽象类,异步加载数据。主要使用CursorLoader。监视数据源的变化,当数据源发生改变的时候,传递新的数据内容。
AsyncTaskLoader:抽象的,提供了一个AsyncTask
CursorLoader:是AsyncTaskLoader的子类,使用ContentResolver查找数据,返回Cursor。加载Cursor数据的时候操作在非UI线程,so,不会阻塞UI线程。该类是查找 ContentProvider提供出来的数据的最好的方式。
使用loader的步骤:
1.Activity、Fragment
2.LoaderManager的实例
3.CursorLoader在后台加载数据--》ContentProvider
4.LoaderManager.LoaderCallbacks实现
5.需要展示数据的:SimpleCursorAdapter
6.数据源:ContentProvider
需要在Activity的onCraete方法中或者是Fragment的onActivityCreated方法中实例化Loader对象:
getLoaderManager().initLoader(0,null, this);
参数:
参数1:给Loader指定id,唯一
参数2:可选项
参数3:LoaderManager.LoaderCallbacks实例。此处让Activity实现了LoaderManager.LoaderCallbacks接口
initLoader()方法调用后,有两种结果:
1.指定id的Loader已经存在,重用。
不存在,创建:onCreateLoader(
自定义ContentProvider
自定义ContentProvider---》提供私有数据:SQLite
有私有数据:SQLite
共享:ContentProvider
定义ContentProvider
1.定义ContentProvider子类
2.重写相关方法
3.注册---》清单文件---》application节点内部---》provider:name、authorities(域名)、exported(是否要暴露数据)
可选项:权限
读:readpermission-->值字符串A
发布权限:permission节点:name:值:值字符串A
---》application节点的外面
写:writepermission-->值字符串A
发布权限:permission节点:name:值:值字符串A
---》application节点的外面
使用ContentProvider提供出来的数据:
添加相应权限:跟以前使用权限一样
UriMatcher:匹配Uri
备匹配:add(authorities, tableName , code)
使用的uri:
Content://authorities/tableName
ContentResolver
Uri
备匹配:add(authorities, tableName/# , code)
备匹配:add(authorities, tableName/* , code)
#:数值
*:文本
Contenturis.withAppendId()
ContentUris.parseId()
Uri.withAppendedPath(contentUri, name);
uri.getLastPathSegment();
SearchView:
注册了5年了,今天却是第一次写博文。