处理程序类应该是静态的,否则可能会发生内存泄漏 - 处理程序具有对主活动变量的引用。

3

Android: 我在我的活动中定义了一个Handler类,并且使用以下代码时收到警告“Handler类应该是静态的,否则可能会发生内存泄漏”:

    Handler messageHandler = new Handler() {
      // @Override 
      public void handleMessage(Message msg) {
        try {
            ... accessing variables defined at the activity level
            ... doing something very important
        }
        super.handleMessage(msg)
      }
    }

然而,问题在于我的消息处理程序引用了主活动变量,因此我无法将其设置为静态。在我的情况下,如何以正确的方式摆脱这个警告?
1个回答

7

更改

Handler messageHandler = new Handler() {
      // @Override 
      public void handleMessage(Message msg) {
        try {
            ... accessing variables defined at the activity level
            ... doing something very important
        }
      }
    }

To

Handler mIncomingHandler = new Handler(new Handler.Callback() {
    @Override
    public boolean handleMessage(Message msg) {
    }
});

参考: 此 Handler 类应该是静态的,否则可能会发生泄漏:IncomingHandler


Handler(Handler.Callback())在API 30中已被弃用,请参考https://dev59.com/Yb7pa4cB1Zd3GeqPxV8m。 - Raii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接