在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 线程中进行某些操作,请使用方法 runOnUiThreadanyView.post