Handler的正确使用,使用静态内部类+虚引用,解决Context泄漏
来源:互联网 发布:网络推广课程 编辑:程序博客网 时间:2024/05/01 05:01
- 我们在使用handler时候很多时候是如下用法:
public class MainActivity extends AppCompatActivity { //private ArrayList<String> mList; //private MyListAdapter mListAdapter; //private ListView mLv; private ImagerView iv; private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case value: iv.setImageResoure(...) break; } } }; 此时就相当于 这个handler是一个内部类, 内部类会持有外部类的引用(iv). 如果此时activty的被退出了. handler持有他的引用,所有这个activity 并不会被销毁,其实还是在内存中.所有就造成的Context泄漏.
- 下面上解决方法
private Handler mHandler = new MyHandler(this); //使用静态的内部类 + 虚引用可以解决这个问题. // 静态的内部类,是随着类的加载而加载,所以静态的内部类就只能访问静态的变量,所以就不就可以解决引用持有问题. private static class MyHandler extends Handler{ private final WeakReference<Activity> mActivity; public MyHandler(Activity activity) { mActivity = new WeakReference<Activity>(activity); } @Override public void handleMessage(Message msg) { System.out.println(msg); //这个方法必须做 点get()看注释文档可以知道:/*Returns this reference object ' s referent . If this reference object has been cleared , either by the program or by the garbage collector , then this method returns < code > null </ code >. @ return The object to which this reference refers , or < code > null </ code > if this reference object has been cleared / 就是通过get()方法可以判断这个对象是否被回收,我们需要判断这个mActivity 是否存在才能做后面的操作.. */ if(mActivity.get() == null) { return; } } }
- 还有一种方法就是:
- 在activity 的ondestory()的时候,
- 调用mHandler.removeCallbacksAndMessages(null);
0 0
- Handler的正确使用,使用静态内部类+虚引用,解决Context泄漏
- 自定义Handler使用静态内部类避免内存泄漏
- Android减少内存泄漏之静态内部类的使用
- Handler的正确使用,防止内存泄漏
- 静态内部类的使用
- 静态内部类的使用
- Handler的正确使用,软引用封装
- 为何Android使用非静态内部类容易造成的泄漏!
- java静态内部类和匿名内部类的使用
- 六个实例教你正确使用Java内部类(成员内部类、匿名内部类、静态内部类、局部内部类)
- java 静态内部类的使用
- java 静态内部类的使用
- java 静态内部类的使用
- 静态内部类的使用场景
- java 静态内部类的使用
- 使用handler内存泄漏解决
- 非静态内部类持有外部类的引用 使用不慎会造成内存溢出
- 静态内部类使用事项
- 系统调用和库函数调用的区别
- hhgg
- UGUI事件机制
- Android中使用GridView和ImageViewSwitcher实现电子相册简单功能
- KeyListener的一些问题
- Handler的正确使用,使用静态内部类+虚引用,解决Context泄漏
- 线程分离
- 每日总结 (2016-12-05)
- C++中const和引用修饰变量和函数的总结
- UNIX系统编程复习笔记 一
- 商人小鑫
- 大学感悟【八】
- xutils
- eclipse Mac安装了tomcat7.0,启动后在window-> preferences选项中找不到tomcat项