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

标签: managedquery 需要 注意 | 发表时间:2012-02-05 19:04 | 作者:
出处:http://www.iteye.com

文章来源: http://www.eyeandroid.com/thread-691-1-1.html
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.

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [managedquery 需要 注意] 推荐:

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

- - ITeye博客
文章来源: http://www.eyeandroid.com/thread-691-1-1.html. Activity 里面提供了一个 managedQuery() 方法,按照 Android SDK 里面的说明,“the activity will manage its lifecycle for you.” 听起来很好,Activity 可以替你管理 Cursor 的生命周期了,就不用记着去 close() 了,代码可以更简洁.

性能优化需要注意的点

- - CSDN博客推荐文章
除非必要,一开始不要优化(尤其是开发阶段). 有些优化准则已经过时,需要考虑当下的软硬件环境(不要墨守成规). 不要过分强调某些系统级指标,如cache 命中率,而应该聚焦性能瓶颈点. 不盲从,测试、找到系统的性能瓶颈,再确定优化手段. 注意权衡优化的成本和收益(有些优化可能需要现有架构做出调整、增加开发/运维成本).

Startup 需不需要一開始就注意 Scale 的問題?

- Ben - Blog.XDite.net
在 Inside 的 Facebook 看到這個他們的論壇上有這個問題,看了一下回覆,覺得算蠻有趣的議題. 剛剛朋友問我看法,簡單聊了一下,後來乾脆決定來這裡寫下我的想法. 還有,開始寫 projects 時,請將你的「注意 Scale」這個問題定義清楚. 在這個議題中,我覺得最容易混淆的點是:將 "Scalability" (擴充性)與 "Maintainability" (維護性)混在一起講.

Startup 需不需要一開始注意資金的問題?

- kivava - Blog.XDite.net
接續上一篇「Startup 需不需要一開始注意 Scale 的問題. 這一篇想來聊,Startup 需不需要一開始注意資金的問題. 沒有錢就會倒,這是大家都知道的事. 但是如同 Scale 問題一樣,在看過不少網路公司起與落之後,我覺得不少人也沒有把「注意資金」的這件事定義清楚. (當然,你必須自己親手創過公司或是掌舵過某個事業才能比較深的感受到這件事).

相亲时需要注意的10个细节

- - 佳人
相亲时需要注意的10个细节,帮你收获第一眼爱情. 过多的家长里短会让对方感觉你是个情感依赖者,以后一旦遇到不如意,就会找他大吐苦水. 在这种负面心理防御下,很少有人愿意与你深入交往. 相反在第一次见面时,如果你只对个人情况蜻蜓点水,只说个大概,反而能给对方留下神秘感,期待与你下次见面. 2、永远留给对方说话时间充分尊重他的话语权.

界面设计中需要注意的小细节

- - 优设(UISDC)
界面设计包括哪些细节、如何深入. 我们常说“细节决定成败”,有些界面会让人觉得不精致,缺细节,而这些细节又包括哪些呢. 不妨来看本文作者,百度用户界面设计师 @JJ-Ying 为您娓娓道来:. 界面元素的对齐,我见过很多同学对齐是永远靠眼睛的. 确实在布局的时候经常需要做到视觉上的对齐,而不是机械的对齐,但这不是界面元素可以随意摆放的借口,该对齐的内容需要对齐,有时候只是举手之劳,养成好习惯很重要,有点强迫症也不是坏事情.

选购电热水袋需要注意什么?

- - 知乎每日精选
市面上常见的电热水袋其实有两种,一种是电极式,一种是电热丝式,两种外表看起来都一样,但是实际上有很大区别. 电极式电热水袋很不安全,依靠电极加热,加热过程中内部溶液是带电的,安全依赖于外部的温控器和人眼(你没看错,电极式电热水袋放气相对频繁,如果鼓了你不放气就热闹了). 这种电热水袋实际上国家已经禁止了,只不过他还在不停的卖…….

设计移动 App 需要注意的 10 点

- - ITeye资讯频道
1.  不要在没有流程图之就前开始设计或者画线框图. 即便一个简单的App也要有一个思虑周全的流程图,以确保在App有合乎逻辑的、合理的导航结构. 另一点值得关注的是确保核心功能所在的屏幕位于上层而不是被埋没在多层导航元素之下. 跳过流程图直接进进入开发会让开发变得复杂、不可控,很容易让用户迷茫,最后选择关掉或者卸载你的App.

iOS7设计需要注意的十件事

- - 互联网的一些事-关注互联网产品管理,交流产品设计、用户体验心得
  在今年的WWDC上,苹果推出了采用全新设计语言打造的iOS7. 新系统弃用了诸如皮革、木质一类的伪3D拟真效果,取而代之的是更加简洁轻量的设计路线,其中文字排版成了重头戏,另外在某些方面也受到了扁平化设计的影响.   对于负责打造iOS应用界面的设计师们来说,长久以来的设计习惯和规则即将被改变.

关于Android创建Activity需要注意的地方

- - CSDN博客推荐文章
1.在onCreate()中加载UI,在onStart()/onResume()中刷新UI. 2.在onCreate()中用Handler延时请求数据,数据处理最好是二次callback回调(第一次来自DB,第二次来自网络). 3.在Activity中尽量少创建Handler,创建一个UIHandler,一个后台HandlerThread足以.