Index: chrome/android/java/src/org/chromium/chrome/browser/gsa/GSAServiceClient.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gsa/GSAServiceClient.java b/chrome/android/java/src/org/chromium/chrome/browser/gsa/GSAServiceClient.java |
index 44ddeabd01cf46032143d55b7d83605bed6f492f..0524399e54361e0d0835fcf8bcf1905795cb0421 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/gsa/GSAServiceClient.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/gsa/GSAServiceClient.java |
@@ -4,6 +4,7 @@ |
package org.chromium.chrome.browser.gsa; |
+import android.annotation.SuppressLint; |
import android.content.ComponentName; |
import android.content.Context; |
import android.content.Intent; |
@@ -39,7 +40,8 @@ public class GSAServiceClient { |
public static final String KEY_GSA_PACKAGE_NAME = "ssb_service:ssb_package_name"; |
/** Messenger to handle incoming messages from the service */ |
- private final Messenger mMessenger = new Messenger(new IncomingHandler()); |
+ private final Messenger mMessenger; |
+ private final IncomingHandler mHandler; |
private final GSAServiceConnection mConnection; |
private final GSAHelper mGsaHelper; |
private Context mContext; |
@@ -52,6 +54,7 @@ public class GSAServiceClient { |
* Handler of incoming messages from service. |
*/ |
@SuppressFBWarnings("BC_IMPOSSIBLE_CAST") |
+ @SuppressLint("HandlerLeak") |
private class IncomingHandler extends Handler { |
@Override |
public void handleMessage(Message msg) { |
@@ -71,6 +74,8 @@ public class GSAServiceClient { |
* Constructs an instance of this class. |
*/ |
public GSAServiceClient(Context context) { |
+ mHandler = new IncomingHandler(); |
+ mMessenger = new Messenger(mHandler); |
mContext = context; |
mConnection = new GSAServiceConnection(); |
mGsaHelper = ((ChromeApplication) mContext.getApplicationContext()) |
@@ -100,6 +105,9 @@ public class GSAServiceClient { |
mContext.unbindService(mConnection); |
mContext = null; |
mService = null; |
+ |
+ // Remove pending handler actions to prevent memory leaks. |
+ mHandler.removeCallbacksAndMessages(null); |
} |
/** |