自定义Handler如何避免内存泄漏

自定义Handler如何避免内存泄漏

一般非静态内部类持有外部类的引用的情况下,造成外部类在使用完成后不能被系统回收内存,从而造成内存泄漏。为了避免这个问题,我们可以自定义的Handler声明为静态内部类形式,然后通过弱引用的方式,让Handler持有外部类的引用,从而可避免内存泄漏问题。

代码实现如下:

private WeakReference<MainActivity> activityWeakReference;
private MyHandler myHandler;

static class MyHandler extends Handler {
private MainActivity activity;

MyHandler(WeakReference<MainActivity> ref) {
	this.activity = ref.get();
}

@Override
public void handleMessage(Message msg) {
	super.handleMessage(msg);
	switch (msg.what) {
		case 1:
		//需要做判空操作
		if (activity != null) {
			activity.mTextView.setText("new Value");
		}
		break;
	default:
	Log.i(TAG, "handleMessage: default ");
	break;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
	//在onCreate中初始化
	activityWeakReference = new WeakReference<MainActivity>(this);
	myHandler = new MyHandler(activityWeakReference);
    mTextView = (TextView) findViewById(R.id.tv_test);
	myHandler.sendEmptyMessage(1);
}

猜你喜欢

转载自blog.csdn.net/wcsbhwy/article/details/89074225