博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android中使用Cursor时防止内存泄露的几个方面
阅读量:6174 次
发布时间:2019-06-21

本文共 1399 字,大约阅读时间需要 4 分钟。

最近在工作中处理了一些内存泄露的问题,在这个过程中我尤其发现了一些基本的问题反而忽略导致内存泄露,比如静态变量,cursor关闭,线程,定时器,反注册,bitmap等等,我稍微统计并总结了一下,当然了,这些问题这么说起来比较笼统,接下来我会根据问题,把一些实例代码贴出来,一步一步分析,在具体的场景下,用行之有效的方法,找出泄露的根本原因,并给出解决方案。

   现在,就从cursor关闭的问题开始把,谁都知道cursor要关闭,但是往往相反,人们却常常忘记关闭,因为真正的应用场景可能并非理想化的简单。
1. 理想化的cursor关闭

1

2

3

4

de >// Sample Codede>

de >Cursor cursor = db.query();de>

de >List<String> list = convertToList(cursor);de>

de >cursor.close();de>

   这是最简单的cursor使用场景,如果这里的cursor没有关闭,我想可能会引起万千口水,一片骂声。

   但是实际场景可能并非如此,这里的cursor可能不会关闭,至少有以下两种可能。

2. Cursor未关闭的可能

    (1). cursor.close()之前发生异常。
    (2). cursor需要继续使用,不能马上关闭,后面忘记关闭了。

3. Cursor.close()之前发生异常

    这个很容易理解,应该也是初学者最开始碰到的常见问题,举例如下:

1

2

3

4

5

6

7

8

9

de >tryde> de >{ de>

de >    de>de >Cursor c = queryCursor(); de>

de >    de>de >int a = c.getInt(1); de>

de >    de>de >......de>

de >    de>de >// 如果出错,后面的cursor.close()将不会执行de>

de >    de>de >......de>

de >    de>de >c.close(); de>

de >} de>de >catchde> de >(Exception e) { de>

de >}de>

  正确写法应该是:

1

2

3

4

5

6

7

8

9

10

11

12

13

de >Cursor c;de>

de >tryde> de >{ de>

de >    de>de >c = queryCursor(); de>

de >    de>de >int a = c.getInt(1); de>

de >    de>de >......de>

de >    de>de >// 如果出错,后面的cursor.close()将不会执行de>

de >    de>de >//c.close(); de>

de >} de>de >catchde> de >(Exception e) { de>

de >} finally{de>

de >    de>de >ifde> de >(c != de>de >nullde>de >) {de>

.relpost{clear:both}

Tag:

发表于2014-05-07 21:40:00 | | 分享 0

引用地址:

转载于:https://www.cnblogs.com/freenovo/p/4469780.html

你可能感兴趣的文章
PHP 设置响应头来解决跨域问题
查看>>
CAS实现SSO单点登录原理
查看>>
博客园美化专用图片链接
查看>>
HDU_1969_二分
查看>>
高等代数葵花宝典—白皮书
查看>>
一种简单的图像修复方法
查看>>
基于DobboX的SOA服务集群搭建
查看>>
C#设计模式之装饰者
查看>>
[noip模拟20170921]模版题
查看>>
获取ip
查看>>
Spring Shell简单应用
查看>>
移动app可开发的意见于分析
查看>>
周总结7
查看>>
类似OutLook布局的开源控件XPanderControls
查看>>
Web前端工程师成长之路——知识汇总
查看>>
[2018-9-4T2]探索黑暗dark
查看>>
【学术信息】中科院2019年学术期刊分区-综合性期刊
查看>>
ShareObject离线存储相关
查看>>
C++ XML
查看>>
windows批处理 打开exe后关闭cmd
查看>>