在android开发过程中,Handler一般我们或多或少都会使用到,虽然使用起来很简单,但是很多人可能不会注意内存泄漏问题,那么怎么快熟解决在使用Handler过程中可能存在的内存泄漏问题呢?请看下面简单的事例
package com.example.myapplication;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
import java.lang.ref.WeakReference;
public class MainActivity extends AppCompatActivity {
String text = "我是晓果......";
private MyHandler myHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myHandler = new MyHandler(this);
new Thread(new Runnable() {
@Override
public void run() {
myHandler.sendEmptyMessageDelayed(0, 3000);
}
}).start();
}
/*
使用软引用,重新构建Handler可以解决内存泄漏
*/
private static class MyHandler extends Handler {
/**
* 如果直接持有一个外部类的强应用,会内存泄漏
* <p>
* 这只软引用保存,当内存已发生GC的时候就会回收。
*/
private WeakReference<MainActivity> mainActivity;
public MyHandler(MainActivity mainActivity) {
this.mainActivity = new WeakReference<MainActivity>(mainActivity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
MainActivity activity = mainActivity.get();
if (activity == null || activity.isFinishing()) {
return;
}
switch (msg.what) {
case 0:
String text = activity.text;
Toast.makeText(activity.getApplicationContext(), text, Toast.LENGTH_SHORT).show();
break;
}
}
}
}
这样就可以防止在使用Handler过程中可能出现泄漏哦~
点击查看更多内容
3人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦