【问题标题】:This Handler class should be static or leaks might occur这个 Handler 类应该是静态的,否则可能会发生泄漏
【发布时间】:2013-09-22 16:09:32
【问题描述】:


当我实现处理程序时,我收到警告

' 这个 Handler 类应该是静态的,否则可能会发生泄漏 '
因为上面的警告我将处理程序定义为静态类。 下面是修改后的。

public static Handler   _handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {


        Bundle bundle = msg.getData();
        .
        .           
        .
        super.handleMessage(msg);
    }

};

现在我的这个处理程序将接收来自许多线程的消息。所以我想知道将这个处理程序定义为静态是否可以? Handler 将所有接收到的消息放在一个队列中,并一一处理,不遗漏任何内容?

【问题讨论】:

  • 这种方式对我不起作用。我的问题不是解决 lint 错误。但是关于同步。如果我将类定义为静态类,我是否会从许多线程中获取所有消息而不会丢失任何内容。
  • 我认为在同步方面没问题。
  • 如果我们可以简单地使用这个,为什么我们需要使用这个代码? - stackoverflow.com/questions/11407943/…
  • 重点是 Handler 类(不是实例)应该是静态的,因为它将它与父类解除绑定,因为没有该 Handler 就不能存在而不被父类包装。在您的代码中,匿名类就可以了。

标签: android static handler synchronize


【解决方案1】:

无论类是否为静态,处理程序始终按照消息发布/调度的顺序一次处理一条消息。

如果不是静态的,担心会长时间泄露类引用:This Handler class should be static or leaks might occur: IncomingHandler

【讨论】:

    猜你喜欢
    • 2012-11-10
    • 2012-07-09
    • 1970-01-01
    • 2013-08-14
    • 2020-09-06
    • 2017-11-02
    • 2020-10-30
    相关资源
    最近更新 更多