Android内存泄漏常见情况

本文详细介绍了Android中常见的内存泄漏原因及解决办法,包括单例模式context的不当使用、静态类强引用Activity、非静态内部类的使用、资源未释放等问题,并推荐了内存泄漏检测工具LeakCanary。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android内存中的泄漏主要是由堆内存造成的。

1 单例模式context的使用,由于引用的context的单例模式生命周期长于即将销毁的Activity导致的内存泄漏。建议使用Application的context。

2 静态类强引用了某个Activity导致Activity无法被回收。

3 非静态内部类的使用,非静态内部类和匿名内部类都会隐式的持有其外部类的引用。建议使用静态内部类加弱应用的方式。

4 对于使用了BraodcastReceiver,ContentObserver,File,Cursor,Stream,Bitmap等资源的使用,应该在Activity销毁时及时关闭或者注销,否则这些资源将不会被回收,造成内存泄漏。

5 webView也会造成内存泄漏


内存工具leakcanary可以用于检测代码中是否存在内存泄漏,使用方式比较简单:

内存监测:
引入:compile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2'
在Application中:
private RefWatcher mrefWatcher;
public static RefWatcher getRefWatcher(Context context){
        BaseApplication application = (BaseApplication) context.getApplicationContext();
        return  application.mrefWatcher;
    }

@Override
public void onCreate() {
mrefWatcher = LeakCanary.install(this);
}
要是有内存泄漏的情况可以在消息栏里面看到有对应的提示,点进去就能查到具体的引用是哪个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值