From c8a66c05e5f0483ca86dca5d4db6e683fa0553aa Mon Sep 17 00:00:00 2001 From: Joey Grover Date: Wed, 27 Jul 2016 11:26:16 -0400 Subject: Removed handler leak suppression and did things the right way --- .../transport/SdlRouterStatusProvider.java | 28 +++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/sdl_android_lib/src/com/smartdevicelink/transport/SdlRouterStatusProvider.java b/sdl_android_lib/src/com/smartdevicelink/transport/SdlRouterStatusProvider.java index 146072253..f36dcb2c0 100644 --- a/sdl_android_lib/src/com/smartdevicelink/transport/SdlRouterStatusProvider.java +++ b/sdl_android_lib/src/com/smartdevicelink/transport/SdlRouterStatusProvider.java @@ -1,5 +1,7 @@ package com.smartdevicelink.transport; +import java.lang.ref.WeakReference; + import android.annotation.SuppressLint; import android.content.ComponentName; import android.content.Context; @@ -22,7 +24,7 @@ public class SdlRouterStatusProvider { Messenger routerServiceMessenger = null; private ComponentName routerService = null; - final Messenger clientMessenger = new Messenger(new ClientHandler()); + final Messenger clientMessenger; private ServiceConnection routerConnection= new ServiceConnection() { @@ -59,6 +61,7 @@ public class SdlRouterStatusProvider { this.context = context; this.routerService = service; this.cb = callback; + this.clientMessenger = new Messenger(new ClientHandler(this)); } @@ -100,17 +103,26 @@ public class SdlRouterStatusProvider { } } - @SuppressLint("HandlerLeak") - class ClientHandler extends Handler { + private void handleRouterStatusConnectedResponse(int connectedStatus){ + if(cb!=null){ + cb.onConnectionStatusUpdate(connectedStatus == 1, context); + } + unBindFromService(); + routerServiceMessenger =null; + } + + static class ClientHandler extends Handler { + WeakReference provider; + + public ClientHandler(SdlRouterStatusProvider provider){ + this.provider = new WeakReference(provider); + } + @Override public void handleMessage(Message msg) { switch (msg.what) { case TransportConstants.ROUTER_STATUS_CONNECTED_STATE_RESPONSE: - if(cb!=null){ - cb.onConnectionStatusUpdate(msg.arg1 == 1, context); - } - unBindFromService(); - routerServiceMessenger =null; + provider.get().handleRouterStatusConnectedResponse(msg.arg1); break; default: break; -- cgit v1.2.1