写的程序里类A中有一些操作比较耗时,就用了线程+handler,把耗时操作放到线程里执行,完成后handler发送消息,然后再更新UI.
现在的问题是我在类里写的handler,总会提示一个警告:
This Handler class should be static or leaks might occur
我在网上搜索了这个警告,得到的解决方案是
Handler类应该应该为static类型,否则有可能造成泄露。在程序消息队列中排队的消息保持了对目标Handler类的应用。如果Handler是个内部类,那么它也会保持它所在的外部类的引用。为了避免泄露这个外部类,应该将Handler声明为static嵌套类,并且使用对外部类的弱应用。大概使用范例是:static class MyHandler extends Handler {
WeakReference<PopupActivity> mActivity; MyHandler(PopupActivity activity) {
mActivity = new WeakReference<PopupActivity>(activity);
} @Override
public void handleMessage(Message msg) {
PopupActivity theActivity = mActivity.get();
switch (msg.what) {
case 0:
theActivity.popPlay.setChecked(true);
break;
}
}
}; MyHandler ttsHandler = new MyHandler(this);
private Cursor mCursor; private void test() {
ttsHandler.sendEmptyMessage(0);
}假设这个handler类为B,这样一来,handler定义成static了,为了在该handler类中使用在类A中定义的一些变量,类A中的这些变量都得定义成static.
我想请教一下,这样大量的static变量对程序的运行有影响吗?会不会很耗内存呢?
多谢了~
现在的问题是我在类里写的handler,总会提示一个警告:
This Handler class should be static or leaks might occur
我在网上搜索了这个警告,得到的解决方案是
Handler类应该应该为static类型,否则有可能造成泄露。在程序消息队列中排队的消息保持了对目标Handler类的应用。如果Handler是个内部类,那么它也会保持它所在的外部类的引用。为了避免泄露这个外部类,应该将Handler声明为static嵌套类,并且使用对外部类的弱应用。大概使用范例是:static class MyHandler extends Handler {
WeakReference<PopupActivity> mActivity; MyHandler(PopupActivity activity) {
mActivity = new WeakReference<PopupActivity>(activity);
} @Override
public void handleMessage(Message msg) {
PopupActivity theActivity = mActivity.get();
switch (msg.what) {
case 0:
theActivity.popPlay.setChecked(true);
break;
}
}
}; MyHandler ttsHandler = new MyHandler(this);
private Cursor mCursor; private void test() {
ttsHandler.sendEmptyMessage(0);
}假设这个handler类为B,这样一来,handler定义成static了,为了在该handler类中使用在类A中定义的一些变量,类A中的这些变量都得定义成static.
我想请教一下,这样大量的static变量对程序的运行有影响吗?会不会很耗内存呢?
多谢了~
还请指教,多谢了~