Android -- Handler引起的内存泄露及解决办法
来源:互联网 发布:vb和java哪个好 编辑:程序博客网 时间:2024/05/16 00:51
用Lint分析时,若使用内部类创建handler,会报内存泄露的问题。造成内存泄露的原因是message和activity的生命周期不一样,当acticvity销毁的时候,message还在消息队列中,导致GC无法进行垃圾回收。
private Handler mHandler = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { //do something ... } }}
以下两种方法可以解决handler引起的内存泄露:
1.用静态类声明Handler,并且用弱引用来引用activity
代码如下:
private static class MyHandler extends Handler { private final WeakReference mActivity; public MyHandler(SampleActivity activity) { mActivity = new WeakReference(activity); } @Override public void handleMessage(Message msg) { SampleActivity activity = mActivity.get(); if (activity != null) { // do something... } }
PS:在Java 中,非静态的内部类和匿名内部类都会隐式地持有其外部类的引用,静态的内部类不会持有外部类的引用。
2.在onPause或onDestroy中释放message和callbacks
添加如下代码:
mHandler.removeCallbacksAndMessages(null);
0 0
- 【android】Handler引起的内存泄露及解决办法
- Android -- Handler引起的内存泄露及解决办法
- Handler引起的内存泄露及解决办法
- Handler可能引起的内存泄露及解决方案-android
- Android 中 Handler 引起的内存泄露
- Android 中 Handler 引起的内存泄露
- Android中Handler引起的内存泄露
- Android中Handler引起的内存泄露
- Android中Handler引起的内存泄露
- Android中Handler引起的内存泄露
- Android中Handler引起的内存泄露
- Android中Handler引起的内存泄露
- Android中Handler引起的内存泄露
- Android中Handler引起的内存泄露
- Android 中 Handler 引起的内存泄露
- Android 中 Handler 引起的内存泄露
- Android中Handler引起的内存泄露
- Android 中 Handler 引起的内存泄露
- Java基础-06.总结二维数组,面向对象
- Meterpreter初探
- 微信屏蔽分享功能
- 2.4 配置文件
- The Java Memory Model vs Akka
- Android -- Handler引起的内存泄露及解决办法
- 2.5 插件
- [Unity3D]UGUI分辨率自适应的组件和方法
- python的函数学习笔记
- 火狐Firefox ios版本二次开发 (三) 源码分析
- JAVA实现的微信扫描二维码支付
- iOS只有证书没有开发者账号生成ipa文件
- Dijkstra算法-单源最短路径(包括路径记录)
- android.os.NetworkOnMainThreadExcepti