From 39ec9c095d12ee1e2afbfcae294ef760770242ca Mon Sep 17 00:00:00 2001 From: Bryce Curtis Date: Tue, 31 May 2011 15:13:54 -0500 Subject: [PATCH] Need to unregister for network intent receiver on shutdown to prevent leaks. --- .../src/com/phonegap/NetworkManager.java | 40 ++++++++++++++----- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/framework/src/com/phonegap/NetworkManager.java b/framework/src/com/phonegap/NetworkManager.java index 779e1c71..0a2fdb1b 100755 --- a/framework/src/com/phonegap/NetworkManager.java +++ b/framework/src/com/phonegap/NetworkManager.java @@ -57,13 +57,15 @@ public class NetworkManager extends Plugin { private static final String LOG_TAG = "NetworkManager"; private String connectionCallbackId; - ConnectivityManager sockMan; - TelephonyManager telephonyManager; + ConnectivityManager sockMan; + TelephonyManager telephonyManager; + BroadcastReceiver receiver; /** * Constructor. */ public NetworkManager() { + this.receiver = null; } /** @@ -76,18 +78,23 @@ public class NetworkManager extends Plugin { super.setContext(ctx); this.sockMan = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE); this.telephonyManager = ((TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE)); - + this.connectionCallbackId = null; + // We need to listen to connectivity events to update navigator.connection IntentFilter intentFilter = new IntentFilter() ; intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); - ctx.registerReceiver(new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - updateConnectionInfo((NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO)); - } - }, intentFilter); - } + if (this.receiver == null) { + this.receiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + updateConnectionInfo((NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO)); + } + }; + ctx.registerReceiver(this.receiver, intentFilter); + } + } + /** * Executes the request and returns PluginResult. * @@ -135,6 +142,19 @@ public class NetworkManager extends Plugin { // All methods take a while, so always use async return false; } + + /** + * Stop network receiver. + */ + public void onDestroy() { + if (this.receiver != null) { + try { + this.ctx.unregisterReceiver(this.receiver); + } catch (Exception e) { + System.out.println("Error unregistering network receiver: " + e.getMessage()); + } + } + } //-------------------------------------------------------------------------- // LOCAL METHODS