Android必知必会-Handler可能引起的内存泄露
2015-09-24 00:27
393 查看
在Android开发中,编写多线程通常会使用到Thread和Handler,细心的朋友会发现,很常见的写法会被编辑器提示有问题,
下面是网上很常见的写法:
那么如何解决呢?
方案一:使用软引用
方案二:自定义静态类
查到的解决方案都略显麻烦,但能防止不必要的内存泄露,还是多多注意的好。
new Handler(){}内的代码背景颜色会变成黄色。Android Studio的提示大概就是需要定义成静态之类的,以防止内存泄露问题。时间仓促,临时整理一下查到的资料,便于后续使用。
下面是网上很常见的写法:
//定义和初始化 private Handler mhandler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); //处理接收到的消息 } }; //下面是调用: new Thread(){ @Override public void run() { super.run(); //做一些费时和不允许放在主线程中进行的事情 //... //事情完成后: mhandler.sendEmptyMessage(1); } }.start();
那么如何解决呢?
方案一:使用软引用
//定义和初始化 WeakReference<Handler> handler = new WeakReference<Handler>(new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); //处理接收到的消息 }); //下面是调用: new Thread(){ @Override public void run() { super.run(); //做一些费时和不允许放在主线程中进行的事情 //... //事情完成后: mhandler.get().sendEmptyMessage(1);//调用需要先get } }.start();
方案二:自定义静态类
private static class MHandler extends Handler{ private Context context; public MHandler(Context c){ context=c; } @Override public void handleMessage(Message msg) { super.handleMessage(msg); //处理接收到的消息 } } //定义 private MHandler mHandler; //初始化 mHandler = new MHandler(this); //调用 new Thread(){ @Override public void run() { super.run(); //做一些费时和不允许放在主线程中进行的事情 //... //事情完成后: mhandler.sendEmptyMessage(1); } }.start();
查到的解决方案都略显麻烦,但能防止不必要的内存泄露,还是多多注意的好。
相关文章推荐
- Android必知必会-Handler可能引起的内存泄露
- Android--SlidingMenu第三方库实现侧滑效果
- 终于搭建成功Xamarin for Android平台
- Android--SwipeRefreshLayout下拉刷新Demo
- Android服务的生命周期
- android之图片异步加载并缓存到本地
- Android Studio建立百度地图步骤及导航无语音解决方法
- android WebView的缓存模式、JS交互
- Android基础学习之navigate(导航)
- Android--PullToRefreshListView的使用
- LayoutParams继承于Android.View.ViewGroup.LayoutParams.
- Android学习实践:5.菜单与对话框,系统信息及结束进程
- Android三种实现定时器的方法
- Android的onLayout、layout方法讲解
- 【转】Android开发之Bitmap的内存优化详解
- Android自定义View---前奏篇(Paint和Canvas的使用)
- android模拟器中SDCard创建全解析
- Android Studio 简单设置界面设置
- Android基础学习之SQLite数据库
- 手机浏览器调试方案--Debugging Firefox for Android with WebIDE