文档章节

Handler内存泄露的改进(18)

f
 flyqilong
发布于 2016/02/27 21:39
字数 403
阅读 19
收藏 0
//平时我们用以下这种写法会存在内存泄露
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
	if (msg.what == 1) {
	   text_show.setText((String) msg.obj);
	  }
		};
	};
//所以为了改进这个,以下方式使用了弱引用的方式来声明,对上面的这种方法进行改进
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	// hangdler使用弱引用进行内存泄露优化
	private final MyHandler handler = new MyHandler(this);//this代表了传入的Activity

	// 建一个静态内部类
	private static class MyHandler extends Handler {
		// 弱引用对象
		WeakReference<MainActivity> weakReference;

		// 定义一个构造函数,传入一个MainActivity
		public MyHandler(MainActivity activity) {
			weakReference = new WeakReference<MainActivity>(activity);
		}

		// 实现Handler里面的方法
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			// 通过软引用对到MainActivity对象进行引用
			MainActivity activity = weakReference.get();
			if (activity != null) {// 如果MainActivity没有退出,获取到的不是空你才进行下一步操作进行发送消息

			}
		}
	}
}


© 著作权归作者所有

共有 人打赏支持
f
粉丝 3
博文 93
码字总数 53900
作品 0
Android工程师
Android 中 Handler 引起的内存泄露

在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用。通常我们的代码会这样实现。 1. public class SampleActivity extends Activity { 2. 3. private final Handler mL...

今晚打猴子
2015/08/06
192
2
Android使用Handler造成内存泄露的分析及解决方法

一、什么是内存泄露?   Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收。也就是说,一...

android开发
2017/12/08
0
0
Android中使用Handler造成内存泄露的分析和解决

什么是内存泄露? Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收。也就是说,一个对象不...

扔物线
2013/12/04
0
10
Android内存泄漏总结和leakcanary使用

什么是内存泄漏? Android虚拟机的垃圾回收采用的是根搜索算法。GC会从根节点(GC Roots)开始对heap进行遍历。到最后,部分没有直接或者间接引用到GC Roots的就是需要回收的垃圾,会被GC回收...

翻滚吧李博
2017/12/22
0
0
内存泄露从入门到精通三部曲之常见原因与用户实践

内存泄露从入门到精通三部曲之常见原因与用户实践 腾讯Bugly特约作者: 姚潮生 常见原因 1.集合类 集合类如果仅仅有添加元素的方法,而没有相应的删除机制,导致内存被占用。如果这个集合类是...

腾讯小伙伴
2015/11/26
47
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

iOS开发用到的图片尺寸汇总

启动图 型号 竖屏 横屏 iPhone SE 640px × 1136px 1136px × 640px iPhone 6s 750px × 1334px 1334px × 750px iPhone 6s Plus 1242px × 2208px 2208px × 1242px iPhone 7 750px × 1334......

业界小白
15分钟前
0
0
浅谈redis

redis是一个开源,内存式的健值存储数据库,也被称为健值存储的字典服务器。健值类型有字符串,hash(哈希类型),set(集合),list(列表) 和有序集合 特征细节: 内存式:redis将健值存储在主...

拐美人
22分钟前
0
0
无限扩容,按需使用!ZStack推出基于阿里云NAS的文件存储服务

日前,ZStack发布2.6.0版本,正式宣布推出基于阿里云NAS的文件存储服务。得益于业界领先的阿里云分布式存储架构,融合NAS后的ZStack 2.6.0拥有高性能、高可靠、容量无限扩展、一键操作、按需...

ZStack社区版
24分钟前
1
0
崛起于Springboot2.X之Mongodb多数据源处理(35)

多数据源:4个mongodb库! 目录结构图: 1、添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId>......

木九天
30分钟前
0
0
如何获取显示器的EDID信息

Q1: 为什么要写这篇文章? A1:在最近的工作中遇到了不少问题,其中很多都是和EDID相关的。可以说,作为一家以“显示”为生的企业,我们时时刻刻在与EDID打交道。EDID这东西很简单,但是如果...

DB_Terrill
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部