From 69a85e9cd14e697c4accdc2fc49758060d1d4e3f Mon Sep 17 00:00:00 2001 From: shouxianli Date: Fri, 7 Jan 2022 17:35:08 +0800 Subject: [PATCH] fix(android): fix memory leak --- .../nativemodules/netinfo/NetInfoModule.java | 47 ++++++++++++------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/framework/js/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/netinfo/NetInfoModule.java b/framework/js/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/netinfo/NetInfoModule.java index d581a14fe..650450230 100644 --- a/framework/js/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/netinfo/NetInfoModule.java +++ b/framework/js/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/netinfo/NetInfoModule.java @@ -101,23 +101,18 @@ public class NetInfoModule extends HippyNativeModuleBase { mConnectivityReceiver = new ConnectivityReceiver(); } - if (!mConnectivityReceiver.isRegistered()) { - try { - IntentFilter filter = new IntentFilter(); - filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); - mContext.getGlobalConfigs().getContext().registerReceiver(mConnectivityReceiver, filter); - mConnectivityReceiver.setRegistered(true); - } catch (Throwable e) { - LogUtils.d("NetInfoModule", "registerReceiver: " + e.getMessage()); - } + try { + Context context = mContext.getGlobalConfigs().getContext(); + mConnectivityReceiver.register(context); + } catch (Throwable e) { + LogUtils.d("NetInfoModule", "registerReceiver: " + e.getMessage()); } } private void unregisterReceiver() { try { - if (mConnectivityReceiver != null && mConnectivityReceiver.isRegistered()) { - mContext.getGlobalConfigs().getContext().unregisterReceiver(mConnectivityReceiver); - mConnectivityReceiver.setRegistered(false); + if (mConnectivityReceiver != null) { + mConnectivityReceiver.unregister(); mConnectivityReceiver = null; } } catch (Throwable e) { @@ -128,15 +123,33 @@ public class NetInfoModule extends HippyNativeModuleBase { private class ConnectivityReceiver extends BroadcastReceiver { private final String EVENT_NAME = "networkStatusDidChange"; - private boolean isRegistered = false; + private boolean isRegistered; private String mCurrentConnectivity; - public boolean isRegistered() { - return isRegistered; + private Context context; + + void register(Context context) { + if (isRegistered) { + return; + } + + this.context = context; + if (context != null) { + IntentFilter filter = new IntentFilter(); + filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); + context.registerReceiver(this, filter); + isRegistered = true; + } } - public void setRegistered(boolean registered) { - isRegistered = registered; + void unregister() { + if (!isRegistered) { + return; + } + if (context != null) { + context.unregisterReceiver(this); + context = null; + } } @Override