Andoid内存泄露

1 android 内存泄露是因为分配的内存回收失败 

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

如果在contenx 传一个Activity 那么在Acitivty finish之后是无法对activity 进行回收的
因为 静态实例会对activity继续引用, 这时候 内存无法GC 会产生oom 和 内存泄露

2 Handler 引起的内存泄露

Handler 的使用造成的内存泄漏问题应该说是最为常见了

,我们知道 Handler、Message 和 MessageQueue 都是相互关联在一起的

 Handler 发送的 Message 尚未被处理,则该 Message 及发送它的 Handler 对象将被线程 MessageQueue 一直持有。

由于 Handler 属于 TLS(Thread Local Storage) 变量, 生命周期和 Activity 是不一致的。

因此这种实现方式一般很难保证跟 View 或者 Activity 的生命周期保持一致,故很容易导致无法正确释放。

 建议使用弱引用 不过会有activity.成员变量 写起来麻烦!

3  在imageloader 加载图片的时候 如果 你使用了Rgb_565这样是可以在加载图片的时候减少内存消耗 不过加载出来的图片会模糊 建议使用 imagesize,

options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(false)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
ImageSize size = new ImageSize(getImageWidth(), getImageWidth());
imageLoader.loadImage(localFile.getOriginalUri(), size, options, new SimpleImageLoadingListener(viewHolder.imageView));
在imageload 加载原图的时候 若果你图片过大 建议使用线程数为1 因为在3个线程同时加载的时候很容易 oom;

4 静态集合类对象记得clear();

5 InputMethodManager 引起的内存泄露
首先你可以先一下这个
http://blog.csdn.net/sodino/article/details/32188809 
写得很详细 他是通过反射获取 content 然后 让context = null 来去处引用

但是这样做会需要在每一次finish 之后都会去call 这个方法
6 我发现5的这位大神的代码是不能处理inputmethodmanager 内存溢出
还是要在Application的时候去初始化
public  void initInputManager(){
try {
Class cls = Class.forName("android.view.inputmethod.InputMethodManager");
Method m = cls.getDeclaredMethod("getInstance", Context.class);
m.setAccessible(true);
m.invoke(null, getApplicationContext());
} catch (Throwable e) {
e.printStackTrace();
}
}
7 剪切板溢出也是一样的道理,有时候在dialog也会溢出,dialog溢出是因为你先finish(),在dismiss()

8 ument 内存泄露处理
在分享的时候会
UMWXHandler wxHandler = new UMWXHandler(activity, wxAppId, wxAppSecret);
wxHandler.addToSocialSDK();
// 添加微信朋友圈
UMWXHandler wxCircleHandler = new UMWXHandler(activity, wxAppId, wxAppSecret);
wxCircleHandler.setToCircle(true);

但是若果你传Activity 的话 会引起内存泄露
可以使用弱引用
Activity activity=activity_.get();
if (activity==null){
return;
}
把参数 WeakReference<Activity> activity_ 传过来



 

转载于:https://www.cnblogs.com/seanzhoutao/p/5615050.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值