From 3157be53fc0b99df5ea89c778b6e1e60f394e0c6 Mon Sep 17 00:00:00 2001 From: Arc Wang Date: Thu, 6 Aug 2020 14:47:43 +0800 Subject: [PATCH] [Wi-Fi] Fix thread leak in WifiConnectionPreferenceController Stop the worker thread for WifiPickerTracker at onDestroy event. The event will be triggered when users click back button at 'Network & internet' page. Bug: 161659380 Test: manual 1. Launch Settings 'Network & internet'. 2. Use below command to observe the thread. ps -T SettingsProcessId | grep WifiConnPrefCtr 3. Click back button and use the command again, the thread should not exist. Change-Id: I9145d534ade168beca52524e7cf85d87e2feb1a0 --- .../wifi/WifiConnectionPreferenceController.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/wifi/WifiConnectionPreferenceController.java b/src/com/android/settings/wifi/WifiConnectionPreferenceController.java index 742edd196dd..13d50821264 100644 --- a/src/com/android/settings/wifi/WifiConnectionPreferenceController.java +++ b/src/com/android/settings/wifi/WifiConnectionPreferenceController.java @@ -29,6 +29,8 @@ import android.os.SimpleClock; import android.os.SystemClock; import androidx.annotation.VisibleForTesting; +import androidx.lifecycle.LifecycleObserver; +import androidx.lifecycle.OnLifecycleEvent; import androidx.preference.PreferenceGroup; import androidx.preference.PreferenceScreen; @@ -50,7 +52,7 @@ import java.time.ZoneOffset; * controller class when there is a wifi connection present. */ public class WifiConnectionPreferenceController extends AbstractPreferenceController implements - WifiPickerTracker.WifiPickerTrackerCallback { + WifiPickerTracker.WifiPickerTrackerCallback, LifecycleObserver { private static final String TAG = "WifiConnPrefCtrl"; @@ -97,6 +99,7 @@ public class WifiConnectionPreferenceController extends AbstractPreferenceContro UpdateListener updateListener, String preferenceGroupKey, int order, int metricsCategory) { super(context); + lifecycle.addObserver(this); mUpdateListener = updateListener; mPreferenceGroupKey = preferenceGroupKey; this.order = order; @@ -124,6 +127,14 @@ public class WifiConnectionPreferenceController extends AbstractPreferenceContro this); } + /** + * This event is triggered when users click back button at 'Network & internet'. + */ + @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) + public void onDestroy() { + mWorkerThread.quit(); + } + @Override public boolean isAvailable() { return mWifiPickerTracker.getConnectedWifiEntry() != null;