Fix potential leak of BroadcastReceiver
am: ed6ef415dc
Change-Id: I960a0ea2f4e890e13305917cdc91d5cd41ca7cbe
diff --git a/service/src/com/android/car/CarProjectionService.java b/service/src/com/android/car/CarProjectionService.java
index 044e1c5..1a80745 100644
--- a/service/src/com/android/car/CarProjectionService.java
+++ b/service/src/com/android/car/CarProjectionService.java
@@ -158,6 +158,20 @@
}
};
+ private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ int currState = intent.getIntExtra(EXTRA_WIFI_AP_STATE, WIFI_AP_STATE_DISABLED);
+ int prevState = intent.getIntExtra(EXTRA_PREVIOUS_WIFI_AP_STATE,
+ WIFI_AP_STATE_DISABLED);
+ int errorCode = intent.getIntExtra(EXTRA_WIFI_AP_FAILURE_REASON, 0);
+ String ifaceName = intent.getStringExtra(EXTRA_WIFI_AP_INTERFACE_NAME);
+ int mode = intent.getIntExtra(EXTRA_WIFI_AP_MODE,
+ WifiManager.IFACE_IP_MODE_UNSPECIFIED);
+ handleWifiApStateChange(currState, prevState, errorCode, ifaceName, mode);
+ }
+ };
+
private boolean mBound;
private Intent mRegisteredService;
@@ -737,22 +751,7 @@
@Override
public void init() {
mContext.registerReceiver(
- new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- final int currState = intent.getIntExtra(EXTRA_WIFI_AP_STATE,
- WIFI_AP_STATE_DISABLED);
- final int prevState = intent.getIntExtra(EXTRA_PREVIOUS_WIFI_AP_STATE,
- WIFI_AP_STATE_DISABLED);
- final int errorCode = intent.getIntExtra(EXTRA_WIFI_AP_FAILURE_REASON, 0);
- final String ifaceName =
- intent.getStringExtra(EXTRA_WIFI_AP_INTERFACE_NAME);
- final int mode = intent.getIntExtra(EXTRA_WIFI_AP_MODE,
- WifiManager.IFACE_IP_MODE_UNSPECIFIED);
- handleWifiApStateChange(currState, prevState, errorCode, ifaceName, mode);
- }
- },
- new IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION));
+ mBroadcastReceiver, new IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION));
}
private void handleWifiApStateChange(int currState, int prevState, int errorCode,
@@ -779,6 +778,7 @@
synchronized (mLock) {
mKeyEventHandlers.clear();
}
+ mContext.unregisterReceiver(mBroadcastReceiver);
}
@Override
diff --git a/service/src/com/android/car/OnShutdownReboot.java b/service/src/com/android/car/OnShutdownReboot.java
index b68ff5b..5a14371 100644
--- a/service/src/com/android/car/OnShutdownReboot.java
+++ b/service/src/com/android/car/OnShutdownReboot.java
@@ -20,6 +20,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.BiConsumer;
@@ -52,10 +53,10 @@
OnShutdownReboot(Context context) {
mContext = context;
- IntentFilter shutdownFilter = new IntentFilter(Intent.ACTION_SHUTDOWN);
- IntentFilter rebootFilter = new IntentFilter(Intent.ACTION_REBOOT);
- mContext.registerReceiver(mReceiver, shutdownFilter);
- mContext.registerReceiver(mReceiver, rebootFilter);
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_SHUTDOWN);
+ filter.addAction(Intent.ACTION_REBOOT);
+ mContext.registerReceiver(mReceiver, filter);
}
OnShutdownReboot addAction(BiConsumer<Context, Intent> action) {
diff --git a/service/src/com/android/car/am/FixedActivityService.java b/service/src/com/android/car/am/FixedActivityService.java
index 20885b8..d3e3c6f 100644
--- a/service/src/com/android/car/am/FixedActivityService.java
+++ b/service/src/com/android/car/am/FixedActivityService.java
@@ -342,6 +342,7 @@
} catch (RemoteException e) {
Log.e(TAG_AM, "remote exception from AM", e);
}
+ mContext.unregisterReceiver(mBroadcastReceiver);
}
@Nullable