Android内存优化-方式八:使用的资源对象要及时关闭 Cursor

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yaoming168/article/details/88946864

资源性对象比如(Cursor,File文件等)往往都用了一些缓冲,我们在不使用的时候,应该及时关闭它们,以便它们的缓冲及时回收内存。它们的缓冲不仅存在于java虚拟机内,还存在于java虚拟机外。如果我们仅仅是把它的引用设置为null,而不关闭它们,往往会造成内存泄漏。因为有些资源性对象,比如SQLiteCursor(在析构函数finalize(),如果我们没有关闭它,它自己会调close()关闭),如果我们没有关闭它,系统在回收它时也会关闭它,但是这样的效率太低了。因此对于资源性对象在不使用的时候,应该调用它的close()函数,将其关闭掉,然后才置为null.在我们的程序退出时一定要确保我们的资源性对象已经关闭。
程序中经常会进行查询数据库的操作,但是经常会有使用完毕Cursor后没有关闭的情况。如果我们的查询结果集比较小,对内存的消耗不容易被发现,只有在常时间大量操作的情况下才会复现内存问题,这样就会给以后的测试和问题排查带来困难和风险。
示例代码:
在这里插入图片描述
修正示例代码:
在这里插入图片描述

Dialer/com/android/dialer/filterednumber/FilteredNumbersUtil.java
在这里插入图片描述

Stream

String x = “1.222222”;
File file = new File(Environment.getExternalStorageDirectory(), “temp.txt”);
FileOutputStream fileOutputStream = new FileOutputStream(file); fileOutputStream.write(x.getBytes());
fileOutputStream.close();

Bitmap
下面是释放Bitmap的示例代码片段。
// 先判断是否已经回收
if(bitmap!= null && !bitmap.isRecycled()){
// 回收并且置为null
bitmap.recycle();
bitmap= null;
}
System.gc();

猜你喜欢

转载自blog.csdn.net/yaoming168/article/details/88946864
今日推荐