1 android 内存泄露是由于分配的内存回收失败 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 都是相互关联在一块儿的ui
Handler 发送的 Message 还没有被处理,则该 Message 及发送它的 Handler 对象将被线程 MessageQueue 一直持有。spa
因为 Handler 属于 TLS(Thread Local Storage) 变量, 生命周期和 Activity 是不一致的。.net
所以这种实现方式通常很难保证跟 View 或者 Activity 的生命周期保持一致,故很容易致使没法正确释放。线程
建议使用弱引用 不过会有activity.成员变量 写起来麻烦!对象
3 在imageloader 加载图片的时候 若是 你使用了Rgb_565这样是能够在加载图片的时候减小内存消耗 不过加载出来的图片会模糊 建议使用 imagesize,blog
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_ 传过来