用 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.

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 图形渲染管线简介_渲染流水线和渲染管线

    图形渲染管线简介_渲染流水线和渲染管线TheGraphicsRenderingPipeline渲染管线,这章主要讲光栅化渲染管线。毕业前实习时,也实现过一个简单的软光栅化渲染管线,再复习一下。在计算机图形学领域,shading

  • 【杀软】Win7内置恶意软件删除工具——MRT

    【杀软】Win7内置恶意软件删除工具——MRTWindows7的WindowsDefender是一款具备实时监控能力的专业恶意软件清除工具。可能许多人将其禁用了,换用其他具备恶意软件清除能力的世界顶级杀软了(比如说笔者就用的NOD32,对恶意软件查杀能力甚是强悍)。如果你不忍WindowsDefender占用大量内存,又不舍得丢弃微软提供的服务,如何是好?有一个折中的方案:使用与其具有相同资源库的MRT…

  • hi3516dv300芯片手册_hi3518ev300

    hi3516dv300芯片手册_hi3518ev300基于Hi3516DV300的嵌入式入门演练(上)基于Hi3516DV300的嵌入式入门演练(下)文章目录信息5常见外设操作5.1USB无线网卡5.1.1在内核中开启驱动支持5.1.2准备驱动需使用到的固件文件5.1.3使用wpa_supplicant连接到热点5.1.4使用hostapd将网卡作为AP5.2TF卡的挂载5.2.1手动挂载5.2.2使用mdev自动挂载设备5.2.3使用udev自动挂载设备6扩展演练6.1使用Buildroot构建根文件系统6.2理解设备树6.3

  • nginx Access日志格式「建议收藏」

    nginx Access日志格式「建议收藏」默认,access日志路径是./logs/access.log,默认的日志格式为combined格式;使用log_format指令可以自定义日志格式;语法log_formatname[escape=default|json|none]string…;escape参数(1.11.8)设置变量的字符转义,json或default风格;默认使用default风格;none关闭转义…

  • MATLAB学习笔记 plotyy函数

    MATLAB学习笔记 plotyy函数1、

  • hdu 4912 Paths on the tree(lca+馋)

    hdu 4912 Paths on the tree(lca+馋)

发表回复

您的电子邮箱地址不会被公开。

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