android handler 内存泄露
来源:互联网 发布:危机公关 知乎 编辑:程序博客网 时间:2024/06/05 23:02
一.通常写法
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
tv.setText(msg.what + "");
System.out.println(msg.what + "");
sendEmptyMessageDelayed(msg.what - 1, 1000);
};
};
IDE会提示你This Handler class should be static or leaks might occur,意思是说这种写法可能会导致外部类(通常是activity)内存泄露,应该改成static类型的
泄露原因:消息队列会持有handler对象的引用,handler会持有外部类的强引用,导致外部activity无法被回收
实测:关闭handler所在的activity,打印代码依旧在执行;手动调用GC,打印代码依旧在执行
二.优化写法
static class TimerLoginHandler extends Handler {
WeakReference<OtherActivity> mActivity;
TimerLoginHandler(OtherActivity activity) {
mActivity = new WeakReference<OtherActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
if (mActivity != null || mActivity.get() != null) {
mActivity.get().tv.setText(msg.what + "s");
System.out.println(msg.what + "");
sendEmptyMessageDelayed(msg.what - 1, 1000);
}
}
}
原理:handler持有外部类的弱引用,GC时不管内存够不够都会回收对象
实测:关闭handler所在的activity,打印代码依旧在执行;手动调用GC报空指针异常,打印代码停止在执行。
- 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 App 内存泄露之Handler
- Android -> 如何避免Handler引起内存泄露
- Android App 内存泄露之Handler
- Android 内部Handler类引起内存泄露
- Android App 内存泄露之Handler
- Struts DynaActionForm example
- LeetCode题解:Climbing Stairs
- 对select()参数fdset的完整理解 http://blog.csdn.net/maray/article/details/8285775
- Redis管道(Pipelining)操作
- ZOJ 1649 Rescue
- android handler 内存泄露
- Session_Flow
- jquery使用cdn加载问题
- iOS多线程之NSoperation和GCD的比较
- COSMOS&SCOPE---微软内部的大数据平台(1)
- Python算法:动态规划
- Matlab : ezplot 和 fplot
- https原理及tomcat配置https方法
- Hausdorff距离—曲线/点集间距离度量