在Handler内部调用方法时使用new operator是否发生memoryleak?
Is it occur memoryleak Using new operator when call a method inside Handler?
当我调用方法时,通常是new
操作符。
最近我有1个问题。
在处理程序中使用 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
运算符发生内存泄漏?
调用handler中的方法时使用new运算符有问题吗?
感谢阅读:)
如果您将某些对象放在静态字段中并且在使用后忘记将其设为空,则会发生内存泄漏。
如果您不使用静态字段,则不必担心内存泄漏。车库收集器经常查找未引用的变量并自动清理它们。
方法执行完成后,分配给方法内部局部变量的新对象可用于垃圾回收。所以你很高兴去记忆。
但是您正在使用 new MainActivity()
。你不应该那样做。
如果您想 运行 在 UI 线程中进行某些操作,请使用方法 runOnUiThread
或 anyView.post
当我调用方法时,通常是new
操作符。
最近我有1个问题。
在处理程序中使用 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
运算符发生内存泄漏?
调用handler中的方法时使用new运算符有问题吗?
感谢阅读:)
如果您将某些对象放在静态字段中并且在使用后忘记将其设为空,则会发生内存泄漏。
如果您不使用静态字段,则不必担心内存泄漏。车库收集器经常查找未引用的变量并自动清理它们。
方法执行完成后,分配给方法内部局部变量的新对象可用于垃圾回收。所以你很高兴去记忆。
但是您正在使用 new MainActivity()
。你不应该那样做。
如果您想 运行 在 UI 线程中进行某些操作,请使用方法 runOnUiThread
或 anyView.post