用 managedQuery() 时须要注意的一个陷阱

用 managedQuery() 时须要注意的一个陷阱

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Activity 里面提供了一个 managedQuery() 方法,依照 Android SDK 里面的说明,“the activity will manage its lifecycle for you.” 听起来非常好,Activity 能够替你管理 Cursor 的生命周期了,就不用记着去 close() 了,代码能够更简洁。

可是 Activity 是怎么去管理 Cursor 的生命周期的呢?SDK 文档没说。近期遇到一个 bug,在一个 Activity 中,用 managedQuery() 查询数据库,将查询得到的 Cursor 用 CursorAdapter 与 ListView 绑定。然后在 Activity 里面运行批量删除数据表记录操作,由于耗时比較长,所以用了多线程处理。測试团队发现的 bug 是,在删除操作进行过程中,假设按下 Home 键,应用就崩溃了。崩溃原因是 Cursor 被释放了,导致工作线程的删除操作异常。

看了 Activity.java 的源代码之后就明确为什么会崩溃了。managedQuery() 事实上无非就是把查询得到的 Cursor 放到了 Activity 类的一个数组成员变量中,然后当 Activity stop 的时候,将这个数组里的每一个 cursor 都关掉,以及在 resume 的时候,将数组里的每一个 cursor 都又一次查询一次。所以在按下 Home 键之后,Activity 被 stop 了,cursor 也就被关闭了,假设有个线程还在继续使用这个 cursor,就会抛异常了。

因此,在用 managedQuery() 的时候,须要清楚 cursor 什么时候会被释放,并考虑好自己的代码在 cursor 被释放后不再须要使用这个 cursor.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118268.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 驼峰命名转换_大驼峰命名法

    驼峰命名转换_大驼峰命名法以前没有写过项目时为了防止出错,数据库和实体类里的变量都统一设置一模一样后来才知道规范的都是使用驼峰命名转换统一设置例如:在xml里配置全局属性<configuration><!–配置全局属性–><settings><!–使用jdbc的getGeneratedKeys获取数据库自增主键值–>…

    2025年7月21日
    3
  • Spring Data Mongodb多表关联查询

    Spring Data Mongodb多表关联查询SpringDataMongodb使用$lookup实现多表关联查询SpringDataMongodb多表关联查询前言一、实例1、数据准备2、一对一:两表关联查询3、一对一:多表关联查询4、一对多:关联查询二、讲道理1、自定义RemoveDollarOperation管道操作的作用先谈谈mongodb原生$lookup去掉DBRef中&amp;amp;amp;quot;\$id&amp;amp;amp;quot;的&amp;amp;amp;quot;\$&amp;a

    2022年5月9日
    129
  • JavaWeb项目为什么我们要放弃JSP?为什么要前后端解耦?为什么要动静分离?[通俗易懂]

    JavaWeb项目为什么我们要放弃JSP?为什么要前后端解耦?为什么要动静分离?[通俗易懂]以前的项目大多数都是java程序猿又当爹又当妈,又搞前端(ajax/jquery/js/html/css等等),又搞后端(java/mysql/oracle等等)。

    2022年4月28日
    34
  • openstack介绍_openstack开发

    openstack介绍_openstack开发什么是云计算最早提出来是亚马逊公司,发家是靠卖书,最后自己把自己卖书的业务移到互联网上,随着自己公司业务的增加,自己公司内部服务器就不够用了,慢慢就开始做虚拟化,做了虚拟化之后,随着公司组织架构的复

    2022年8月2日
    7
  • 搭建个人服务器

    搭建个人服务器组建一个自己的服务器相信学习了一段时间的网页以后,都想自己做一个网站,体验一哈当站长的感觉,这里小佬弟今天就教大家搭建一个属于自己的服务器!…

    2022年6月11日
    50
  • PCEP 协议学习笔记

    PCEP 协议学习笔记RFC5440章节:PCReq消息响应PCC发送的PCReq的

    2025年9月30日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号