使用WeakReference,解决 Handler class should be static or leaks might occur问题
来源:互联网 发布:天天向上四大网络作家 编辑:程序博客网 时间:2024/05/21 19:43
首先定义一个Activity子类:
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 AutoActivity 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,解决 Handler class should be static or leaks might occur问题
- This Handler class should be static or leaks might occur
- This Handler class should be static or leaks might occur
- This Handler class should be static or leaks might occur
- The Handler class should be static or leaks might occur.
- This Handler class should be static or leaks might occur
- This Handler class should be static or leaks might occur
- This Handler class should be static or leaks might occur
- This handler class should be static or leaks might occur
- This Handler class should be static or leaks might occur
- This Handler class should be static or leaks might occur.
- This Handler class should be static or leaks might occur,Handler和Context使用的注意事项!
- 关于Handler 使用This Handler class should be static or leaks might occur 警告处理
- 关于Handler 使用This Handler class should be static or leaks might occur 警告处理
- 解决异常:This Handler class should be static or leaks might occur
- 解决This Handler class should be static or leaks might occur
- Android 关于Handler警告处理 This Handler class should be static or leaks might occur
- This Handler class should be static or leaks might occur Android
- Java面试相关-- Java类加载全过程
- 【反ajax】webSocket实现实时推送功能
- 【CRT】【组合数】Number Theory Special Training T1 eqution 题解
- qt 切换快捷键
- 【转】MySql索引类型的总结和使用
- 使用WeakReference,解决 Handler class should be static or leaks might occur问题
- oracle数据库常用知识1
- JieCaoVideoPlayer 使用的坑
- 认识iReport并创建其模板
- Mybatis操作Sybase数据库游标分页
- 欢迎使用CSDN-markdown编辑器
- 用Maven创建Mahout环境详细过程
- C++中cin的返回值
- 没办法前置声明命名空间里的东西