Android 解决handler内存泄露的方法
程序员文章站
2022-07-14 18:38:25
...
1、简介
大体理解为:
Handler 在使用的时候一般要依附于一个对象,很多时候 handler 延时发送的时候 ,所依附的对象得不到释放,于是出现了 handler 泄露。
2、方法一避免Handler 泄露
1)在对象被销毁的时候 断掉与Handler 的联系,销毁Handler 消息的处理。
@Override
public void onDestroy() {
// 移除所有的handler 消息.
mHandler.removeCallbacksAndMessages(null);
}
removeCallbacks(Runnable r)和removeMessages(int what) 可以删除制定的 message
3、方法二添加弱连接
静态类不持有外部类的对象,所以你的Activity可以随意被回收,同时添加handler 和 对象之间的弱引用 代码如下:
/**
*
* 实现的主要功能。
*
* @version 1.0.0
* @author Abay Zhuang <br/>
* Create at 2014-7-28
*/
public class HandlerActivity2 extends Activity {
private static final int MESSAGE_1 = 1;
private static final int MESSAGE_2 = 2;
private static final int MESSAGE_3 = 3;
private final Handler mHandler = new MyHandler(this);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHandler.sendMessageDelayed(Message.obtain(), 60000);
// just finish this activity
finish();
}
public void todo() {
};
private static class MyHandler extends Handler {
private final WeakReference<HandlerActivity2> mActivity;
public MyHandler(HandlerActivity2 activity) {
mActivity = new WeakReference<HandlerActivity2>(activity);
}
@Override
public void handleMessage(Message msg) {
System.out.println(msg);
if (mActivity.get() == null) {
return;
}
mActivity.get().todo();
}
}
文件参考:
Android中使用Handler造成内存泄露的分析和解决
https://blog.csdn.net/jdsjlzx/article/details/51386440
上一篇: 内存泄漏调试(2)——VLD
下一篇: 转
推荐阅读
-
Android Activity切换(跳转)时出现黑屏的解决方法 分享
-
Android中ImageView无法居中的问题解决方法
-
Android Studio启动报错Java 1.8 or later is required的解决方法
-
Mac中Eclipse连不上Android手机的解决方法
-
Android Studio不能获取远程依赖包的完美解决方法
-
Android 使用【AIDL】调用外部服务的解决方法
-
Android 4.0 设置全屏修改的解决方法
-
在android中增加curl的解决方法
-
IIS6 w3wp.exe进程占用cpu和内存过多的解决方法
-
phpExcel导出大量数据出现内存溢出错误的解决方法