diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
index 9455b70..a16f4b5 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java
+++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
@@ -56,6 +56,8 @@
 
 import kotlin.Unit;
 
+import kotlinx.coroutines.Job;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -96,6 +98,8 @@
     private AtomicBoolean mShouldFilterOutSatellitePlmn = new AtomicBoolean();
 
     private NetworkScanRepository mNetworkScanRepository;
+    @Nullable
+    private Job mNetworkScanJob = null;
 
     private NetworkSelectRepository mNetworkSelectRepository;
 
@@ -213,13 +217,14 @@
 
     private void launchNetworkScan() {
         setProgressBarVisible(true);
-        mNetworkScanRepository.launchNetworkScan(getViewLifecycleOwner(), (networkScanResult) -> {
-            if (isPreferenceScreenEnabled()) {
-                scanResultHandler(networkScanResult);
-            }
+        mNetworkScanJob = mNetworkScanRepository.launchNetworkScan(getViewLifecycleOwner(),
+                (networkScanResult) -> {
+                    if (isPreferenceScreenEnabled()) {
+                        scanResultHandler(networkScanResult);
+                    }
 
-            return Unit.INSTANCE;
-        });
+                    return Unit.INSTANCE;
+                });
     }
 
     /**
@@ -245,6 +250,12 @@
             return false;
         }
 
+        // Need stop network scan before manual select network.
+        if (mNetworkScanJob != null) {
+            mNetworkScanJob.cancel(null);
+            mNetworkScanJob = null;
+        }
+
         // Refresh the last selected item in case users reselect network.
         clearPreferenceSummary();
         if (mSelectedPreference != null) {
diff --git a/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt b/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt
index 4ae5842..0e15033 100644
--- a/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt
+++ b/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt
@@ -52,9 +52,8 @@
     private val telephonyManager = context.telephonyManager(subId)
 
     /** TODO: Move this to UI layer, when UI layer migrated to Kotlin. */
-    fun launchNetworkScan(lifecycleOwner: LifecycleOwner, onResult: (NetworkScanResult) -> Unit) {
+    fun launchNetworkScan(lifecycleOwner: LifecycleOwner, onResult: (NetworkScanResult) -> Unit) =
         networkScanFlow().collectLatestWithLifecycle(lifecycleOwner, action = onResult)
-    }
 
     data class CellInfoScanKey(
         val title: String?,
@@ -101,7 +100,10 @@
             callback,
         )
 
-        awaitClose { networkScan.stopScan() }
+        awaitClose {
+            networkScan.stopScan()
+            Log.d(TAG, "network scan stopped")
+        }
     }.conflate().onEach { Log.d(TAG, "networkScanFlow: $it") }.flowOn(Dispatchers.Default)
 
     /** Create network scan for allowed network types. */
