Android Loader详解三:重启与回调

简介:

From:http://blog.csdn.net/nkmnkm/article/details/7252037

 

重启装载器

当你使用initLoader()时,如果指定ID的装载器已经存在,则它使用这个装载器.如果不存在呢,它将创建一个新的.但是有时你却是想丢弃旧的然后开始新的数据.

要想丢弃旧数据,你应使用restartLoader().例如,下面这个SearchView.OnQueryTextListener的实现在用户查询发生改变时重启了装载器,装载器于是需重启从而能使用新的搜索过虑来进行一次新的查询.

[java]  view plain copy
  1. <span style="font-family:KaiTi_GB2312;">public boolean onQueryTextChanged(String newText) {  
  2.     // 当动作栏的搜索字串发生改时被调用.  
  3.     // 更新搜索过虑,然后重新启动装载利用这个新过虑进行新的查询.  
  4.     mCurFilter = !TextUtils.isEmpty(newText) ? newText : null;  
  5.     getLoaderManager().restartLoader(0nullthis);  
  6.     return true;  
  7. }</span>  

使用LoaderManager的回调

LoaderManager.LoaderCallbacks是一个回调接口,它使得客户端可以与LoaderManager进行交互.

装载器,一般指的是CursorLoader,我们希望在它停止后依然保持数据.这使得应用可以在activityfragment的 onStop() onStart() 之间保持数据,所以当用户回到一个应用时,它们不需等待数据加载.你使用LoaderManager.LoaderCallbacks 方法们,在需要时创建新的装载器,并且告诉应用什么时候要停止使用装载器的数据.

LoaderManager.LoaderCallbacks 包含以下方法们:

  • onCreateLoader() —跟据传入的ID,初始化并返回一个新的装载器.

  • onLoadFinished() —当一个装载器完成了它的装载过程后被调用.

  • onLoaderReset() —当一个装载器被重置而什其数据无效时被调用.

onCreateLoader

当你试图去操作一个装载器时(比如,通过initLoader()),会检查是否指定ID的装载器已经存在.如果它不存在,将会触发LoaderManager.LoaderCallbacks 的方法onCreateLoader().这是你创建一个新装载器的地方.通常这个装载器是一个CursorLoader,但是你也可以实现你自己的装载器.

在下面的例子中,回调方法onCreateLoader() 创建一个CursorLoader.你必须使用构造方法来建立CursorLoader ,构造方法需要向ContentProvider执行一次查询的完整信息作为参数,它尤其需要:

  • uri —要获取的内容的URI

  • projection —要返回的列组成的列被.传入null 将会返回所有的列,但这是低效的.

  • selection —一个过滤器,表明哪些行将被返回.格式化成类似SQLWHERE 语句的样子(除了没有WHERE).传入null 将返回所有的行.

  • selectionArgs —你可以在selection 中包含一些'?',它将被本参数的值替换掉.这些值出现的顺序与'?'selection中出现的顺序一至.值将作为字符串.

  • sortOrder —如何为行们排序.格式化成类似于SQLORDER BY 语句的样字(除了没有ORDERBY).传入null将使用默认顺序,默认顺序可能是无顺序.

例子:

[java]  view plain copy
  1.  // If non-null, this is the current filter the user has provided.  
  2. String mCurFilter;  
  3. ...  
  4. public Loader<Cursor> onCreateLoader(int id, Bundle args) {  
  5.     // 这里是在需要创建新装载器时被调用的.  
  6.     // 我们只是简单的拥有一个装载器,所以我们不需要关心ID.  
  7.     // First, pick the base URI to use depending on whether we are  
  8.     // currently filtering.  
  9.     Uri baseUri;  
  10.     if (mCurFilter != null) {  
  11.         baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,  
  12.                   Uri.encode(mCurFilter));  
  13.     } else {  
  14.         baseUri = Contacts.CONTENT_URI;  
  15.     }  
  16.     // Now create and return a CursorLoader that will take care of  
  17.     // creating a Cursor for the data being displayed.  
  18.     String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("  
  19.             + Contacts.HAS_PHONE_NUMBER + "=1) AND ("  
  20.             + Contacts.DISPLAY_NAME + " != '' ))";  
  21.     return new CursorLoader(getActivity(), baseUri,  
  22.             CONTACTS_SUMMARY_PROJECTION, select, null,  
  23.             Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");  
  24. }  
   本文转自老Zhan博客园博客,原文链接:http://www.cnblogs.com/mybkn/articles/2485226.html,如需转载请自行联系原作者
相关文章
|
6月前
|
Java Android开发
Android系统 获取用户最后操作时间回调实现和原理分析
Android系统 获取用户最后操作时间回调实现和原理分析
195 0
|
开发工具 Android开发 开发者
Android如何回调编码后的音视频数据
有开发者提到,在RTMP推送端的基础上,希望能回调编码后的音视频数据,便于开发者对接第三方系统,如GB28181.
|
28天前
|
Java 程序员 开发工具
Android|修复阿里云播放器下载不回调的问题
虽然 GC 带来了很多便利,但在实际编码时,我们也需要注意对象的生命周期管理,该存活的存活,该释放的释放,避免因为 GC 导致的问题。
33 2
|
3月前
|
算法 数据处理 开发工具
Android平台RTSP|RTMP播放器如何回调YUV或RGB数据
在开发Android平台上的RTSP或RTMP播放器时,开发者不仅追求低延迟播放,还希望获取解码后的视频数据(如YUV或RGB格式),以便进行视觉算法分析。使用大牛直播SDK中的SmartPlayer,可在确保播放流畅的同时,通过设置外部渲染器(`SmartPlayerSetExternalRender`)来高效地回调原始视频数据。例如,对于RGBA数据,需实现`NTExternalRender`接口,并重写相关方法以处理数据和尺寸变化。同样地,对于I420(YUV)数据,也需要相应地实现接口以满足需求。这种方式使得开发者能在不影响常规播放功能的情况下,进行定制化的视频处理任务。
|
3月前
|
开发工具 Android开发
Android项目架构设计问题之SDK内部减少每次回调时的冗余判断逻辑如何解决
Android项目架构设计问题之SDK内部减少每次回调时的冗余判断逻辑如何解决
40 0
|
3月前
|
开发工具 Android开发
Android项目架构设计问题之外部客户方便地设置回调如何解决
Android项目架构设计问题之外部客户方便地设置回调如何解决
28 0
|
3月前
|
Java API 开发工具
Android项目架构设计问题之为SDK添加新的回调支持如何解决
Android项目架构设计问题之为SDK添加新的回调支持如何解决
25 0
|
6月前
|
Android开发
Android Loader机制
Android Loader机制
55 1
|
6月前
|
存储 Java Linux
Android系统获取event事件回调等几种实现和原理分析
Android系统获取event事件回调等几种实现和原理分析
365 0
|
Java Android开发 C++
[笔记]Visual Studio 2015 开发安卓so库JNI层——回调调用
[笔记]Visual Studio 2015 开发安卓so库JNI层——回调调用