文档章节

防止内存泄露的几个注意点

B
 Bugwang
发布于 2016/08/01 11:14
字数 340
阅读 2
收藏 0
  1. 资源对象没关闭。
    如Cursor、File等资源。他们会在finalize中关闭,但这样效率太低。容易造成内存泄露。
    SQLiteCursor,当数据量大的时候容易泄露
  2. 使用Adapter时,没有使用系统缓存的converView。
  3. 即时调用recycle()释放不再使用的Bitmap。
    适当降低Bitmap的采样率:

    BitmapFactory.Options options = newBitmapFactory.Options(); options.inSampleSize = 2;//图片宽高都为原来的二分之一,即图片为原来的四分之一 Bitmap bitmap =BitmapFactory.decodeStream(cr.openInputStream(uri), null, options); preview.setImageBitmap(bitmap);

  4. 使用application的context来替代activity相关的context。
    尽量避免activity的context在自己的范围外被使用,这样会导致activity无法释放。
  5. 注册没取消造成内存泄露
    如:广播
  6. 集合中的对象没清理造成的内存泄露我们通常把一些对象的引用加入到了集合中,当我们不需要该对象时,并没有把它的引用从集合中清理掉,这样这个集合就会越来越大。如果这个集合是static的话,那情况就更严重了。

7.Handler应该申明为静态对象, 并在其内部类中保存一个对外部类的弱引用。

static class MyHandler extends Handler 
{
       WeakReference<Activity > mActivityReference;
       MyHandler(Activity activity)
      { 
            mActivityReference= new WeakReference<Activity>(activity);
      }
     @Override
     public void handleMessage(Message msg)
    {
           final Activity activity = mActivityReference.get();
           if (activity != null)
          {
                 mImageView.setImageBitmap(mBitmap);
          }    
     }
}

本文转载自:http://www.codeceo.com/article/android-interview-question.html

共有 人打赏支持
B
粉丝 0
博文 13
码字总数 1813
作品 0
沙坪坝
ARC 下内存泄露的那些点

在网上搜了一下,发现这篇文章是第一篇、也是唯一 一篇总结 ARC 内存泄露的博客,哈哈好兴奋。 在 iOS 4.2 时,苹果推出了 ARC 的内存管理机制。这是一种编译期的内存管理方式,在编译时,编...

hejunbinlan
2016/06/07
25
0
Perfmon.exe辅助检查.NET程序内存泄漏

因为工作用C#写的程序老是内存泄漏,在网上找了找资料后,发现了Windows自带的性能监视器Perfmon.exe可以辅助查看.NET程序的运行状况。今天研究了一番,下面的内容就是一些我认为比较重要需要...

北风其凉
2014/07/30
0
0
内存泄露和LeakCanary的故事

新鲜文章请关注微信公众号: JueCode 今天我们来聊一聊Android中的内存泄露和内存泄露的检测工具LeakCanary。Java有垃圾回收线程为什么还会发生内存泄露?原因就是外部人为持有对象引用,持有...

juexingzhe
05/22
0
0
C++学习笔记(四)

前言 本篇是《C++ Primer》的学习笔记,以及自己尝试实现数据结构Vector的部分功能,借此练习动态数组操作,同时介绍一种使用VS 2013进行内存泄露检测的方法。 动态数组 1、申请动态数组 默认...

初雪之音
2016/01/15
44
0
彻底搞懂 Java 内存泄露

Java内存回收方式 Java判断对象是否可以回收使用的而是可达性分析算法。 在主流的商用程序语言中(Java和C#),都是使用可达性分析算法判断对象是否存活的。这个算法的基本思路就是通过一系列名...

2017/12/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

c语言之内存分配笔记

先看一个数组: short array[5] = {1,2} // 这儿定义的一个int类型的数组,数组第1和第2个元素值是1和2.其余后面默认会给值为0; 或者 short array[] = {1,2};//这儿数组第1和第2个元素,数组...

DannyCoder
今天
2
0
Shell | linux安装包不用选择Y/N的方法

apt-get install -y packageOR echo "y" | sudo apt-get install package

云迹
今天
2
0
Hadoop的大数据生态圈

基于Hadoop的大数据的产品圈 大数据产品的一句话概括 Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架...

zimingforever
今天
5
0
八大包装类型的equals方法

先看其中一个源码 结论:八大包装类型的equals方法都是先判断类型是否相同,不相同则是false,相同则判断值是否相等 注意:包装类型不能直接用==来等值比较,否则编译报错,但是数值的基本类型...

xuklc
今天
2
0
NoSQL , Memcached介绍

什么是NoSQL 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗...

TaoXu
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部