文档章节

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
221
2
Android内存泄漏总结和leakcanary使用

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

翻滚吧李博
2017/12/22
0
0
Android使用Handler造成内存泄露的分析及解决方法

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

android开发
2017/12/08
0
0
内存泄露从入门到精通三部曲之常见原因与用户实践

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

腾讯小伙伴
2015/11/26
47
0
Android中使用Handler造成内存泄露的分析和解决

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

扔物线
2013/12/04
0
10

没有更多内容

加载失败,请刷新页面

加载更多

2019-1-16

2019-1-16 星期三 晴转霾 早饭:小面包+鸡蛋糕;午饭:馍+地三鲜;晚饭:; 6:50起床,因为媳妇说可能今天晚上去大雁塔那边吃饭,早上起来后洗了个澡(主要因为头发很油了)。 今天早上天气...

莱菔籽
20分钟前
0
0
localDate、localDateTime、localTime的使用

从前端接受的时候,localDate类型的数据要转换,加 @DateTimeFormat(pattern = "yyyy-MM-dd")

shimmerkaiye
26分钟前
1
0
1.二叉树

概念 二叉树(binary tree)是每个节点最多只有两个分支(即不存在分支度大于2的节点)的结构树。通常分支被称为“左子树”和“右子树”,左子树和右子树的位置不能随意颠倒。二叉树的第i层 ...

火拳-艾斯
29分钟前
3
0
java 线程

一、通过实现Runnable接口来创建线程 public class TestThread implements Runnable { public void run() { try { for (int i = 0; i < 10; i++) { ......

朝如青丝暮成雪
35分钟前
1
0
关于eclipse2017 import javax.servlet.jsp.tagext引入错误得问题

在eclipse中: 这个javax.servlet.jsp.tagext属于是tomcat相关jar包找到jsp-api.jar 在tomcat文件夹下边的lib文件夹中就有 如果项目中报错的话 把这个加入到项目中 在myeclipse中: 如下图,...

ZhangLG
49分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部