Android官方开发文档Training系列课程中文版:后台加载数据之使用CursorLoader进行查询

原文地址:http://android.xsoftlab.net/training/load-data-background/index.html

引言

在ContentProvider中查询数据是需要花点时间的。如果你直接在Activity进行查询,那么这可能会导致UI线程阻塞,并会引起”Application Not Responding”异常。就算不会发生这些事情,那么用户也能感觉到卡顿,这会非常恼人的。为了避免这样的问题,应该将查询的工作放在单独的线程中执行,然后等待它执行完毕后将结果显示出来。

你可以使用一个异步查询对象在后台查询,然后等查询结束之后再与Activity建立连接。这个对象就是我们要说的CursorLoader。CursorLoader除了可以进行基本查询之外,还可以在数据发生变化后自动的重新进行查询。

这节课主要会学习如何使用CursorLoader在后台进行查询。

使用CursorLoader进行查询

CursorLoader对象在后台运行着一个异步查询,当查询结束之后会将结果返回到Activity或FragmentActivity。这使得查询在进行的过程中Activity或FragmentActivity还可以继续与用户交互。

定义使用CursorLoader的Activity

如果要在Activity中使用CursorLoader,需要用到LoaderCallbacks接口。CursorLoader会调用该接口中的方法,从而使得与Activity产生交互。这节课与下节课都会详细描述该接口中的回调。

举个例子,下面的代码演示了如何定义一个使用了CursorLoader的FragmentActivity。通过继承FragmentActivity,你可以获得CursorLoader对Fragment的支持:

public class PhotoThumbnailFragment extends FragmentActivity implementsLoaderManager.LoaderCallbacks<Cursor> {
...
}

初始化查询

使用LoaderManager.initLoader()可以初始化查询。它其实初始化了后台查询框架。可以将初始化这部分工作放在用户输入了需要查询的数据之后,或者如果不需要用户输入数据,那么也可以将这部分工作放在onCreate()或onCreateView()中执行:

    // Identifies a particular Loader being used in this componentprivate static final int URL_LOADER = 0;.../* When the system is ready for the Fragment to appear, this displays* the Fragment's View*/public View onCreateView(LayoutInflater inflater,ViewGroup viewGroup,Bundle bundle) {.../** Initializes the CursorLoader. The URL_LOADER value is eventually passed* to onCreateLoader().*/getLoaderManager().initLoader(URL_LOADER, null, this);...}

Note: getLoaderManager()方法只对Fragment类可用。如果需要在FragmentActivity中获得LoaderManager,调用getSupportLoaderManager()方法即可。

开始查询

后台查询框架的初始化一旦完成,紧接着你所实现的onCreateLoader()就会被调用。如果要启动查询,需要在该方法内返回一个CursorLoader对象。你可以实例化一个空的CursorLoader,然后再使用它的方法定义查询,或者你也可以在实例化CursorLoader的时候定义查询。

/*
* Callback that's invoked when the system has initialized the Loader and
* is ready to start the query. This usually happens when initLoader() is
* called. The loaderID argument contains the ID value passed to the
* initLoader() call.
*/
@Override
public Loader<Cursor> onCreateLoader(int loaderID, Bundle bundle)
{/** Takes action based on the ID of the Loader that's being created*/switch (loaderID) {case URL_LOADER:// Returns a new CursorLoaderreturn new CursorLoader(getActivity(),   // Parent activity contextmDataUrl,        // Table to querymProjection,     // Projection to returnnull,            // No selection clausenull,            // No selection argumentsnull             // Default sort order);default:// An invalid id was passed inreturn null;}
}

一旦后台查询框架获得了该对象,那么它会马上在后台开始查询。当查询结果完成,后台查询框架会调用onLoadFinished(),该方法的具体内容会在下节课说明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | 神经协同推理

论文笔记整理&#xff1a;叶橄强&#xff0c;浙江大学计算机学院&#xff0c;知识图谱和知识推理方向。Paper link: https://arxiv.org/abs/2005.08129Github link: https://github.com/Scagin/NeuralLogicReasoning背景&#xff1a;推荐任务推荐作为一种认知智能任务&#xff…

在服务器上安装anaconda遇到的问题总结

1 安装anaconda需要一些安装包&#xff0c;需要提前备准备好&#xff0c;比如bunzip2&#xff0c; gcc编译等软件。 cd /anacondaRElyanacondaREly文件夹下放了anaconda所依赖的安装包&#xff0c;切换到该路径 rpm -Uvh *.rpm --nodeps --force安装好anaconda 需要的依赖环境…

LeetCode 693. 交替位二进制数(位运算)

1. 题目 给定一个正整数&#xff0c;检查他是否为交替位二进制数&#xff1a;换句话说&#xff0c;就是他的二进制数相邻的两个位数永不相等。 输入: 5 输出: True 解释: 5的二进制数是: 101输入: 7 输出: False 解释: 7的二进制数是: 111输入: 11 输出: False 解释: 11的二进…

全栈深度学习第6期: 模型测试和部署

一起追剧鸭简介Berkeley全栈深度学习追剧计划是由夕小瑶的卖萌屋发起的优质公开课打卡项目&#xff0c;通过微信群为同期追剧的小伙伴提供交流平台。关于该计划的详请见这里。Berkeley深度学习追剧群目前已有1000小伙伴加入&#xff0c;公众号后台回复口令 深度学习追剧 入群。…

Android官方开发文档Training系列课程中文版:后台加载数据之处理CursorLoader的查询结果

原文地址&#xff1a;http://android.xsoftlab.net/training/load-data-background/handle-results.html 就像上节课所说的&#xff0c;我们应该在onCreateLoader()内使用CursorLoader来加载数据。那么在数据加载完毕之后&#xff0c;加载结果会通过LoaderCallbacks.onLoadFin…

开源开放 | 欧若科技通过 OpenKG 开放 Nebula Graph 图数据库

开源工具名称&#xff1a;Nebula Graph贡献者&#xff1a;杭州欧若数网科技有限公司 Nebula GraphOpenKG 链接&#xff1a;http://openkg.cn/tool/nebula-graph-database 谣言盐水漱口能预防感染&#xff1f;钟南山院士团队公开辟谣&#xff1a;「盐水漱口有利于…

pkuseg-python的postag.zip在不能联网的服务器上的解决办法

关于pkuseg-python的基本介绍和使用&#xff1a; pkuseg.pkuseg&#xff08; postag True&#xff09;时&#xff0c;会触发download.py文件的下载命令&#xff0c;从github中下载&#xff0c;进而会导致服务器报错&#xff0c;如下 进而在pkuseg文件下打开download.py和__in…

数据库的方向 - 行vs列(转自: IBM i 中国开发团队)

转载地址&#xff1a;https://www.ibm.com/developerworks/community/blogs/IBMi/entry/database?langen 原文链接&#xff1a;http://ibmsystemsmag.blogs.com/you_and_i/db2/ 数据库的方向 - 行vs列 如果你是一位数据库专家的话&#xff0c;这篇博客可能帮不了你什么。 …

Android自动化页面测速在美团的实践

背景 随着移动互联网的快速发展&#xff0c;移动应用越来越注重用户体验。美团技术团队在开发过程中也非常注重提升移动应用的整体质量&#xff0c;其中很重要的一项内容就是页面的加载速度。如果发生冷启动时间过长、页面渲染时间过长、网络请求过慢等现象&#xff0c;就会直接…

NLP领域的首次Hard Label黑盒攻击!

文 | 阿毅编 | 小轶背景前段时间已经和大家分享了两篇关于NLP Privacy的文章。今天&#xff0c;我们又来给大家推送优质论文了&#xff08;公众号学习法&#xff09;。其实&#xff0c;NLP与其他方向的跨界结合这段时间层出不穷&#xff0c;且都发表到了非常好的顶会上。目前有…

论文浅尝 - ACL2020 | 利用知识库嵌入改进多跳 KGQA

论文笔记整理&#xff1a;吴畏&#xff0c;东南大学硕士研究生。来源: ACL 2020论文地址: https://www.aclweb.org/anthology/2020.acl-main.412.pdf开源代码: https://github.com/malllabiisc/EmbedKGQA动机在多跳KGQA中&#xff0c;系统需要对KG的多个边缘执行推理以推断出正…

Android官方开发文档Training系列课程中文版:管理设备的睡眠状态

原文地址&#xff1a;http://android.xsoftlab.net/training/scheduling/index.html 引言 当Android设备处于闲置状态时&#xff0c;它的屏幕首先会变暗&#xff0c;接着会关闭屏幕&#xff0c;最后会将CPU关闭。这些举措可以防止设备的电量迅速被耗尽。但是当APP需要的话&am…

解决pip安装报错:is not a supported wheel on this platform

解决pip安装报错&#xff1a;is not a supported wheel on this platform&#xff1a;https://blog.csdn.net/sty945/article/details/105200436/ 原因1 你下载安装的包不是当前平台所支持的 原因2 你下载的包&#xff0c;不符合你所在的平台的安装whl的名称规范&#xff0c;所…

MCI:移动持续集成在大众点评的实践

一、背景 美团是全球最大的互联网生活服务平台&#xff0c;为3.2亿活跃用户和500多万的优质商户提供一个连接线上与线下的电子商务服务。秉承“帮大家吃得更好&#xff0c;生活更好”的使命&#xff0c;我们的业务覆盖了超过200个品类和2800个城区县网络&#xff0c;在餐饮、外…

LeetCode 260. 只出现一次的数字 III(位运算)

1. 题目 给定一个整数数组 nums&#xff0c;其中恰好有两个元素只出现一次&#xff0c;其余所有元素均出现两次。 找出只出现一次的那两个元素。 示例 :输入: [1,2,1,3,2,5] 输出: [3,5]注意&#xff1a; 结果输出的顺序并不重要&#xff0c;对于上面的例子&#xff0c; [5,…

没有什么多模态任务是一层Transformer解决不了的!

文 | 子龙曾几何时&#xff0c;多模态预训练已经不是一个新的话题&#xff0c;各大顶会诸多论文仿佛搭上Visual和BERT&#xff0c;就能成功paper1&#xff0c;VisualBERT、ViLBERT层出不穷&#xff0c;傻傻分不清楚......这些年NLPer在跨界上忙活的不亦乐乎&#xff0c;提取视觉…

论文浅尝 - KDD2020 | 真实世界超图的结构模式和生成模型

论文笔记整理&#xff1a;毕祯&#xff0c;浙江大学硕士&#xff0c;研究方向&#xff1a;知识图谱、自然语言处理。链接&#xff1a;https://arxiv.org/abs/2006.07060动机图已被用作对人或物体之间的成对关系建模的强大工具。而超图是更广泛概念的一种特殊类型&#xff0c;其…

文档智能综述

1 万字综述&#xff1a;行业知识图谱构建最新进展 微信公众号链接&#xff1a;https://mp.weixin.qq.com/s/iVIoaZxhS1EyC2etRnBf4Q 2 高翔&#xff1a;智能文档处理与办公自动化 微信公众号链接&#xff1a;https://mp.weixin.qq.com/s/M6iv_NAnhibT36Y27BSSeQ 3 迪奥NLP丨企…

Android官方开发文档Training系列课程中文版:APP的内存管理

写在开头的话&#xff1a; 如果有同学对Android性能比较关注的&#xff0c;可以阅读这篇文章&#xff1a;Android性能优化建议 原文地址&#xff1a;http://android.xsoftlab.net/training/articles/memory.html 随机存储器(RAM)在任何运行环境中都是一块非常重要的区域&#…

LeetCode 1122. 数组的相对排序

1. 题目 给你两个数组&#xff0c;arr1 和 arr2&#xff0c; arr2 中的元素各不相同 arr2 中的每个元素都出现在 arr1 中 对 arr1 中的元素进行排序&#xff0c;使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。 示…