WeakReference的使用
来源:互联网 发布:传奇盛世心法数据 编辑:程序博客网 时间:2024/05/12 23:11
如果这样:
public class AutoActivity extends Activity {
Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { };};@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_auto);}
}
报警告:This Handler class should be static or leaks might occur意思是:Handler
类应该为static类型,否则可能会造成内存泄漏。
原因:当一个android主线程被创建的时候,同时会有一个Looper对象被创建,而这个Looper对象会实现一个MessageQueue(消息队列),当我们创建一个handler对象时,而handler的作用就是放入和取出消息从这个消息队列中,每当我们通过handler将一个msg放入消息队列时,这个msg就会持有一个handler对象的引用。因此当Activity被结束后,这个msg在被取出来之前,这msg会继续存活,但是这个msg持有handler的引用,而handler在Activity中创建,会持有Activity的引用,因而当Activity结束后,Activity对象并不能够被gc回收,因而出现内存泄漏。
解决:
一:将hanlder对象声明为静态的对象。
二:使用静态内部类,通过WeakReference实现对Activity的弱引用。具体实现看以下代码:
public class MainActivity extends Activity {
MyHandler handler = new MyHandler(this);@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_auto);}static class MyHandler extends Handler{ WeakReference<AutoActivity> mactivity; public MyHandler(AutoActivity activity){ mactivity = new WeakReference<AutoActivity>(activity); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 100: //在这里面处理msg //通过mactivity.get()获取Activity的引用(即上下文context) break; default: break; } }}
}
0 0
- WeakReference的使用
- WeakReference的理解与使用
- WeakReference的理解与使用
- Java WeakReference的理解与使用
- Java WeakReference的理解与使用
- Java WeakReference的理解与使用
- Java WeakReference的理解与使用
- Java WeakReference的理解与使用
- Java WeakReference的理解与使用
- Java WeakReference的理解与使用
- Java WeakReference的理解与使用
- Java WeakReference的理解与使用
- Java WeakReference的理解与使用
- Java WeakReference的理解与使用onProgressUpdate
- Android WeakReference的理解与使用
- Java WeakReference的理解与使用
- StrongReference,SoftReference, WeakReference的使用总结
- Java Reference(SoftReference、WeakReference、PhantomReference)的使用
- 一个Servlet的实例
- GitHub 里的笔记
- LiatView下拉图片放大
- 算法分析学习之路
- 1003
- WeakReference的使用
- JavaScript中的for in (1)
- Graph Cuts
- android studio JNI使用
- java 输出去掉前导的 0 和后面不要的 0
- 剑指offer之面试题17:合并两个排序的链表
- caffe学习笔记
- 2016四月学习笔记
- Binder通信