使用Loaders
2014-03-03 17:47
423 查看
接下来会介绍一下如何来使用Loader异步加载数据,看看手机配置项发生改变时(eg:横竖屏切换)Activity是否为我们保存了Loader的状态,从而不用重新去加载数据。
下面是一个加载相册中所有相片的例子,为了兼容所有的Android版本,使用了兼容包中的FragmentActivity和LoaderCallbacks两个类。其实使用Loaders非常简单,LoaderManager提供了一种非常方便的Loader管理方式,通过赋予不同的Loader
ID来区分不同的Loader,下面以系统提供的CursorLoader为例。只需要在onCreateLoader中创建相应的Loader,那么Loader如何来进行数据的加载我们就不用管了,只需在onLoaderFinish方法中处理加载过来的数据就行。
接下来我们来看一下Activity是否在手机配置项发生改变时保存了Loader的状态,避免了重复加载过程。下图是第一次应用启动时打印的结果,我们发现此时Loader进行了第一次的创建
![](https://img-blog.csdn.net/20140303174428687?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHVfYmluZ2Jpbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
再来看看横竖屏切换时打印的情况。我们可以发现此时Activity重新onCreate,而Loader并没有重新创建,也就是说Activity为我们保存好了Loader的状态,当发生配置项改变时不用重新去创建Loader,重新加载数据。做到及时的响应用户。
![](https://img-blog.csdn.net/20140303174522156?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHVfYmluZ2Jpbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
本小节主要介绍了如何来使用系提供的Loaders和Activity对Loader提供的一些非常友好的支持,下一小节将会来创建我们自己的Loader,也就是如何来自定义Loader。
下面是一个加载相册中所有相片的例子,为了兼容所有的Android版本,使用了兼容包中的FragmentActivity和LoaderCallbacks两个类。其实使用Loaders非常简单,LoaderManager提供了一种非常方便的Loader管理方式,通过赋予不同的Loader
ID来区分不同的Loader,下面以系统提供的CursorLoader为例。只需要在onCreateLoader中创建相应的Loader,那么Loader如何来进行数据的加载我们就不用管了,只需在onLoaderFinish方法中处理加载过来的数据就行。
public class CustomGalleryView extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor>{ private static final int LOADER_ID = 1; private Config config; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_gallery_main); Intent clientIntent = getIntent(); Log.i("INFO", "CustomGalleryView onCreate..."); String windowTitle = clientIntent.getStringExtra(AppConstant.WINDOW_TITLE); if(!TextUtils.isEmpty(windowTitle)) setTitle(windowTitle); int defaultCheckResId = R.drawable.checkbox_up; int defaultCheckedResId = R.drawable.checkbox_selected; int checkboxCheckResId = clientIntent.getIntExtra(AppConstant.CHECKBOX_CHECK_RESOURCE, defaultCheckResId); int checkboxCheckedResId = clientIntent.getIntExtra(AppConstant.CHECKBOX_CHECKED_RESOURCE, defaultCheckedResId); String[] projection = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID }; String sortOrder = MediaStore.Images.Media._ID; Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; config = new Config(checkboxCheckResId, checkboxCheckedResId, uri, projection, null, null, sortOrder); getSupportLoaderManager().initLoader(LOADER_ID, null, this); } @Override public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { Log.i("INFO", "Loader_id:"+arg0+" onCreateLoader"); CursorLoader cursorLoader = new CursorLoader(this, config.getUri(), config.getProjection(), config.getSelection(), config.getSelectionArgs(), config.getSortOrder()); return cursorLoader; } @Override public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) { if(cursor != null){ if(cursor.moveToFirst()){ do { String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); int id = cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media._ID)); Log.i("INFO", path+":"+id); } while (cursor.moveToNext()); } } } @Override public void onLoaderReset(Loader<Cursor> arg0) { // TODO Auto-generated method stub } }
接下来我们来看一下Activity是否在手机配置项发生改变时保存了Loader的状态,避免了重复加载过程。下图是第一次应用启动时打印的结果,我们发现此时Loader进行了第一次的创建
再来看看横竖屏切换时打印的情况。我们可以发现此时Activity重新onCreate,而Loader并没有重新创建,也就是说Activity为我们保存好了Loader的状态,当发生配置项改变时不用重新去创建Loader,重新加载数据。做到及时的响应用户。
本小节主要介绍了如何来使用系提供的Loaders和Activity对Loader提供的一些非常友好的支持,下一小节将会来创建我们自己的Loader,也就是如何来自定义Loader。
相关文章推荐
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- 解決Linux下Android开发真机调试设备不被识别问题
- [Android]在代码里运行另一个程序的方法
- [软件咨询]WPS2012正式版已发布 金山Office移动版4.0发布
- Android笔记-Linux Kernel Ftrace (Function Trace)解析
- android USB如何修改VID具体实现
- Android增量升级的方法和原理详细介绍
- Android Mouse实现过程详细笔记
- 深入Android Browser配置管理的详解
- Android Mms之:深入理解对话列表管理
- Android APP与媒体存储服务的交互
- android 多线程技术应用
- Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解
- Android数据类型之间相互转换系统介绍
- 通过Android trace文件分析死锁ANR实例过程
- Android实现左右滑动效果的方法详解
- Android 各国语言缩写及简称详细介绍
- Android 自动判断是电话,网址,EMAIL方法之Linkify的使用