Handle警告的原因:handle定义为内部类,会持有外部类的引用,如果外部类结束,handle因为执行耗时操作没有结束,并持有外部类的引用,导致外部类占用的内存不能释放。
解决办法:handle定义为静态内部类,handle对于外部类的组件和方法的操作借助弱引用来实现。
public class MainActivity{
//定义自定义handle变量
private testHandle test = new testHandle(this);
/**
*其他属性和方法省略
*/
//定义静态内部类
private static class testHandle extends Handler {
//弱引用,MainActivity,可以说其他activity视情况而定
private WeakReference<MainActivity> activityWeakReference;
public testHandle(MainActivity activity) {//内部类构造函数
super();
this.activityWeakReference = new WeakReference<MainActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (activityWeakReference.get() == null) {//判断引用不为空,否则直接返回
return;
}
final MainActivity activity = activityWeakReference.get();//获取弱引用对象
//执行操作 ,例如,我要操作activity的组件或者方法,
if(msg.what==10){
//这些不能private 的
activity.mEditView.setText("测试");//调用组件
activity.finish();//调用方法
}
}
}
//外部内使用handle
private void method(){//使用定义的handle
Message m = test.obtainMessage();
m.what=10;
test.sendMessage(m);
}
}