Android 当我从处理程序调用非静态方法时,如何使处理程序保持静态以避免泄漏?
所以我有一个服务,它通过蓝牙与一些硬件进行通信。服务包含用于从活动接收消息的处理程序。此消息是服务操作的命令/说明。处理程序的定义如下:Android 当我从处理程序调用非静态方法时,如何使处理程序保持静态以避免泄漏?,android,memory-leaks,static,handler,Android,Memory Leaks,Static,Handler,所以我有一个服务,它通过蓝牙与一些硬件进行通信。服务包含用于从活动接收消息的处理程序。此消息是服务操作的命令/说明。处理程序的定义如下: class IncomingHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg){ case: blahblah ....
class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg){
case: blahblah ....
break;
case: blahblah ....
break;
}
}
}
实际上,一切都正常工作,但lint警告我可能会发生泄漏,我应该让这个处理器保持静态
此处理程序类应该是静态的,否则可能会发生泄漏。
问题:确保处理程序类不保留对外部对象的引用
类Id:HandlerLeak在Android中,处理程序类应该是静态的或
可能发生泄漏。消息在应用程序线程的
MessageQueue还保留其目标处理程序。如果处理程序是
内部类,其外部类也将保留。避
泄漏外部类,将处理程序声明为静态嵌套类
对它的外层阶级有一个软弱的参照
我的问题是,我不能简单地使处理程序是静态的,因为我调用的是非静态方法,这取决于服务的消息。一些方法正在调用其他方法,并且有很多方法,所以我不可能需要将它们全部设置为静态,不是吗
在这里,我需要更多经验丰富的开发者的建议。如何解决这个问题?谢谢我认为非常有必要将处理程序设置为静态。您可以声明一个“静态类XXXHandler扩展处理程序”,那么处理程序(消息的目标)将不会保留对封闭类的引用。那就不会泄露了。 如果要在消息中传递某些内容,请将它们放入Message.object中。如果处理程序要处理多个对象,只需将它们放在对象[]中,并在需要使用它们时使用强制转换。 我以前发现过这样的问题。:) 您不需要创建Java类,只需创建一个处理程序并覆盖这些括号之间的handleMessage方法
{
@Override
public void handleMessage (Message msg){
}
}
将弱引用添加到外部类
{
@Override
public void handleMessage (Message msg){
}
}