[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
This commit is contained in:
@@ -29,6 +29,8 @@ import android.os.SimpleClock;
|
|||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
import androidx.lifecycle.LifecycleObserver;
|
||||||
|
import androidx.lifecycle.OnLifecycleEvent;
|
||||||
import androidx.preference.PreferenceGroup;
|
import androidx.preference.PreferenceGroup;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
@@ -50,7 +52,7 @@ import java.time.ZoneOffset;
|
|||||||
* controller class when there is a wifi connection present.
|
* controller class when there is a wifi connection present.
|
||||||
*/
|
*/
|
||||||
public class WifiConnectionPreferenceController extends AbstractPreferenceController implements
|
public class WifiConnectionPreferenceController extends AbstractPreferenceController implements
|
||||||
WifiPickerTracker.WifiPickerTrackerCallback {
|
WifiPickerTracker.WifiPickerTrackerCallback, LifecycleObserver {
|
||||||
|
|
||||||
private static final String TAG = "WifiConnPrefCtrl";
|
private static final String TAG = "WifiConnPrefCtrl";
|
||||||
|
|
||||||
@@ -97,6 +99,7 @@ public class WifiConnectionPreferenceController extends AbstractPreferenceContro
|
|||||||
UpdateListener updateListener, String preferenceGroupKey, int order,
|
UpdateListener updateListener, String preferenceGroupKey, int order,
|
||||||
int metricsCategory) {
|
int metricsCategory) {
|
||||||
super(context);
|
super(context);
|
||||||
|
lifecycle.addObserver(this);
|
||||||
mUpdateListener = updateListener;
|
mUpdateListener = updateListener;
|
||||||
mPreferenceGroupKey = preferenceGroupKey;
|
mPreferenceGroupKey = preferenceGroupKey;
|
||||||
this.order = order;
|
this.order = order;
|
||||||
@@ -124,6 +127,14 @@ public class WifiConnectionPreferenceController extends AbstractPreferenceContro
|
|||||||
this);
|
this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This event is triggered when users click back button at 'Network & internet'.
|
||||||
|
*/
|
||||||
|
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
|
||||||
|
public void onDestroy() {
|
||||||
|
mWorkerThread.quit();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAvailable() {
|
public boolean isAvailable() {
|
||||||
return mWifiPickerTracker.getConnectedWifiEntry() != null;
|
return mWifiPickerTracker.getConnectedWifiEntry() != null;
|
||||||
|
Reference in New Issue
Block a user