Handler有可能引起内存溢出
来源:互联网 发布:base64 decode php 编辑:程序博客网 时间:2024/05/16 07:26
Handler作为Activity的内部类有可能会导致内存泄露的问题。具体如何解决,在国外有人提出,如下:
Issue: Ensures that Handler classes do not hold on to a reference to an outer class
In Android, Handler classes should be static or leaks might occur. Messages enqueued on the application thread's MessageQueue also retain their target Handler. If the Handler is an inner class, its outer class will be retained as well. To avoid leaking the outer class, declare the Handler as a static nested class with a WeakReference to its outer class.
大体翻译如下:
Handler类应该应该为static类型,否则有可能造成泄露。在程序消息队列中排队的消息保持了对目标Handler类的应用。如果Handler是个内部类,那么它也会保持它所在的外部类的引用。为了避免泄露这个外部类,应该将Handler声明为static嵌套类,并且使用对外部类的弱应用。
使用范例:
- static class MyHandler extends Handler {
- WeakReference<PopupActivity> mActivity;
- MyHandler(PopupActivity activity) {
- mActivity = new WeakReference<PopupActivity>(activity);
- }
- @Override
- public void handleMessage(Message msg) {
- PopupActivity theActivity = mActivity.get();
- switch (msg.what) {
- case 0:
- theActivity.popPlay.setChecked(true);
- break;
- }
- }
- };
- MyHandler ttsHandler = new MyHandler(this);
- private Cursor mCursor;
- private void test() {
- ttsHandler.sendEmptyMessage(0);
- }
- Handler有可能引起内存溢出
- 【转】Handler有可能引起内存溢出
- 【转】Handler有可能引起内存溢出
- Android之“Handler内部类引起的内存溢出警告”
- handler引起内存泄露
- Handler 内存溢出优化
- Handler内存溢出解决方案
- strcpy引起的内存溢出
- Handler 引起的内存泄露
- Handler 引起的内存泄露
- Handler 引起的内存泄露
- Handler 引起的内存泄露
- Handler 引起的内存泄露
- Handler引起的内存泄露
- Handler 引起的内存泄露
- Handler引起的内存泄露
- Handler 引起的内存泄露
- Handler引起的内存泄露
- GoAgent图文教程详细版
- Linux man文档语法解析
- C#中的委托
- java中的数字精确计算
- 锁、游标、索引
- Handler有可能引起内存溢出
- Boost::any分析
- The Castle
- ClassLoader.getResourceAsStream(name);获取配置文件的方法
- ioctl()中的cmd
- 初学者学Java(八)
- java中list、set和map 的区别
- 123
- 通过Dictionary中的key理解object