android - This Handler class should be static or leaks might occur: IncomingHandler -
i'm developing android 2.3.3 application service. have within service communicate main activity:
public class udplistenerservice extends service { private static final string tag = "udplistenerservice"; //private threadgroup mythreads = new threadgroup("udplistenerserviceworker"); private udplistenerthread mythread; /** * handler communicate workerthread service. */ private handler mservicehandler; // used receive messages activity final messenger inmessenger = new messenger(new incominghandler()); // utilize send message activity private messenger outmessenger; class incominghandler extends handler { @override public void handlemessage(message msg) { } } /** * target publish clients send messages incoming handler. */ final messenger mmessenger = new messenger(new incominghandler()); [ ... ] } and here, final messenger mmessenger = new messenger(new incominghandler());, next lint warning:
this handler class should static or leaks might occur: incominghandler
what mean?
if incominghandler class not static, have reference service object.
handler objects same thread share mutual looper object, post messages , read from.
as messages contain target handler, long there messages target handler in message queue, handler cannot garbage collected. if handler not static, service or activity cannot garbage collected, after beingness destroyed.
this may lead memory leaks, time @ to the lowest degree - long messages remain int queue. not much of issue unless post long delayed messages.
you can create incominghandler static , have weakreference service:
static class incominghandler extends handler { private final weakreference<udplistenerservice> mservice; incominghandler(udplistenerservice service) { mservice = new weakreference<udplistenerservice>(service); } @override public void handlemessage(message msg) { udplistenerservice service = mservice.get(); if (service != null) { service.handlemessage(msg); } } } see post romain guy farther reference
android memory-leaks static-classes android-lint android-handler
No comments:
Post a Comment