Handler內存泄露的改進(18)

//平時咱們用如下這種寫法會存在內存泄露
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沒有退出,獲取到的不是空你才進行下一步操做進行發送消息

			}
		}
	}
}
相關文章
相關標籤/搜索