android 内存泄漏

参考文章

1、Android性能优化-内存泄漏(上)
http://huangjunbin.com/2017/03/22/Android%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96-%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F%EF%BC%88%E4%B8%8A%EF%BC%89/
Android性能优化-内存泄漏(下)
http://huangjunbin.com/2017/03/22/Android%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96-%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F%EF%BC%88%E4%B8%8B%EF%BC%89/

Context引起的内测泄漏

1)错误的单例模式

public class Singleton {  
    private static Singleton instance;  
    private Context mContext;  

    private Singleton(Context context) {  
        this.mContext = context;  
    }  

    public static Singleton getInstance(Context context) {  
        if (instance == null) {  
            instance = new Singleton(context);  
        }  
        return instance;  
    }  
}

即使Activity被销毁掉,但因为它的引用还存在于一个Singleton中,就不可能被GC掉
2)View持有Activity引用

public class MainActivity extends Activity {  
    private static Drawable mDrawable;  

    @Override  
    protected void onCreate(Bundle saveInstanceState) {  
        super.onCreate(saveInstanceState);  
        setContentView(R.layout.activity_main);  
        ImageView iv = new ImageView(this);  
        mDrawable = getResources().getDrawable(R.drawable.ic_launcher);  
        iv.setImageDrawable(mDrawable);  
    }  
}

有一个静态的Drawable对象当ImageView设置这个Drawable时,ImageView保存了mDrawable的引用,而ImageView传入的this是MainActivity的mContext,因为被static修饰的mDrawable是常驻内存的,MainActivity是它的间接引用,MainActivity被销毁时,也不能被GC掉,所以造成内存泄漏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值