是否发生memoryleak在Handler中调用方法时使用new运算符?
问题描述:
当我打电话的时候,经常是new
运营商。 最近我有1个问题。是否发生memoryleak在Handler中调用方法时使用new运算符?
在处理程序中使用new
运算符调用方法时是否存在问题?
首先请看看源
public clas MainActivity extends Activity {
private final static int MSG_START = 1000;
private fian lstatic int INTERVAL = 300000;/5 MIN
private recordHandler recordHandler = new recordHandler(this);
//click record button
@Override
public void onClick(View v) {
recordHandler.sendEmptyMessage(RECORD_START);
}
private static final class recordHandler extends Handler {
private final WeakReference<MainActivity> weak;
public recordHandler(MainActivity act) {
weak = new WeakReference<>(act);
}
public void handleMessage(Message msg) {
MainActivity act = weak.get();
if (act != null) {
switch (msg.what) {
case RECORD_START:
//do record start
new MainActivity().startRecord();
new MainActivity().recordHandler.sendEmptyMessageDelayed(MSG_START, INTERVAL);
break;
}
}
}
private static final Runnable runnable = new Runnable() {
@Override
public void run() {
}
};
}
这个来源,当用户点击录制按钮,开始记录每5分。
无论如何,我想重构以防止内存泄漏。
也许,new
运算符发生memoryleak?
使用new运算符调用处理程序内部的方法时会出现问题吗?
感谢阅读:)如果你把在静态字段中的一些对象,却忘了让空使用它后,会出现
答
内存泄漏。
如果你不使用静态字段,你不应该担心内存泄漏。车库收集器经常查找未引用的变量并自动清理它们。
一旦方法执行完成,分配给方法内部局部变量的新对象就可用于垃圾回收。所以你很乐意去回忆。
但是您使用的是new MainActivity()
。你不应该那样做。
如果你想运行在UI线程的东西,使用的方法runOnUiThread
或anyView.post
是什么让你觉得你有内存泄漏?什么让你的东西GC不会处理它? – John3136