重點擷取以下:
Handler作为Activity的内部类有可能会导致内存泄露的问题。
Handler类应该应该为static类型,否则有可能造成泄露。在程序消息队列中排队的消息保持了对目标Handler类的引用。如果Handler是个内部类,那么它也会保持它所在的外部类的引用。为了避免泄露这个外部类,应该将Handler声明为static嵌套类,并且使用对外部类的弱应用。
package cn.beyondcompare.statichandlerdemo;
import java.lang.ref.WeakReference;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
public class MainActivity extends Activity {
MyHandler handler = new MyHandler(this);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
test();
}
static class MyHandler extends Handler {
WeakReference mActivity;
MyHandler(MainActivity activity) {
mActivity = new WeakReference (activity);
}
@Override
public void handleMessage(Message msg) {
MainActivity theActivity = (MainActivity) mActivity.get();
switch (msg.what) {
case 0:
theActivity.test1();
break;
}
}
};
private void test() {
handler.sendEmptyMessage(0);
}
private void test1() {
}
}
沒有留言:
張貼留言