Android Handler leak 分析及解决办法
2015-10-27 14:05
357 查看
静态内部类只能访问外部类的静态成员,因为非静态成员必须依附于某个具体的对象,而静态内部类不需要要
静态内部类可以直接实例化,不需要绑定到外部类上再去实例化
handler出现泄漏的两个原因:
1)message没有清楚干净
2)handler持有的主线程的COntext实例
解决方案:
1) message:在Context的destroy的时候利用handler.removeCallbacksAndMessages(null)来清除
2)静态内部类+WeakReference
静态内部类可以直接实例化,不需要绑定到外部类上再去实例化
handler出现泄漏的两个原因:
1)message没有清楚干净
2)handler持有的主线程的COntext实例
解决方案:
1) message:在Context的destroy的时候利用handler.removeCallbacksAndMessages(null)来清除
2)静态内部类+WeakReference
public class MyActivity extends Activity { private MyHandler mHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mHandler = new MyHandler(this); } @Override protected void onDestroy() { // Remove all Runnable and Message. mHandler.removeCallbacksAndMessages(null); super.onDestroy(); } static class MyHandler extends Handler { private WeakReference<MyActivity> mOuter; public MyHandler(MyActivity activity) { mOuter = new WeakReference<MyActivity>(activity); } @Override public void handleMessage(Message msg) { MyActivity outer = mOuter.get(); if (outer != null) { // Do something with outer as your wish. } } } }
相关文章推荐
- Android API 中文 ListView
- android双击返回键退出程序的实现
- android listview实现点击某个item后使其显示在屏幕顶端
- android-zip解压缩方法
- android客户端从服务器端获取json数据并解析
- Android 知识图谱
- 废物再利用 旧Android手机打造Web服务器
- 如何获取Android RecyclerView滑动的距离
- 关于android读取ICCID、IMSI和IMEI
- android zbar二维码扫描(中文不乱码)
- android事件分发
- 一看就会Android之单选按钮和复选框的事件监听
- android 使静音模式下音乐也静音,切换到其他模式恢复
- android 在通话状态下,当有通知来时(如低电量提示、wifi 连接,等),没有通知音
- android LL 加密的手机开机过程中提示手机空间不足
- android Animation动画详解(带实例)
- Android环境结构Android Studio解决方法不能启动,第一次
- Android-MediaPlayer 和 SoundPool
- Android-打反编译工具的一种方法
- 【FastDev4Android框架开发】Android实现沉浸式状态栏(六)