Browse Source

network check improvement

Milan Jurkulak 3 năm trước cách đây
mục cha
commit
17d2c25e4a

+ 1 - 1
tvlib/src/main/kotlin/org/mjdev/tvlib/network/NetworkConnectivityService.kt

@@ -22,7 +22,7 @@ interface NetworkConnectivityService {
         @Composable
         @Composable
         fun rememberNetworkService(): NetworkConnectivityService {
         fun rememberNetworkService(): NetworkConnectivityService {
             val context = LocalContext.current
             val context = LocalContext.current
-            return remember {
+            return remember(Unit) {
                 NetworkConnectivityServiceImpl(context)
                 NetworkConnectivityServiceImpl(context)
             }
             }
         }
         }

+ 11 - 5
tvlib/src/main/kotlin/org/mjdev/tvlib/network/NetworkConnectivityServiceImpl.kt

@@ -20,6 +20,7 @@ import kotlinx.coroutines.flow.callbackFlow
 import kotlinx.coroutines.flow.distinctUntilChanged
 import kotlinx.coroutines.flow.distinctUntilChanged
 import kotlinx.coroutines.flow.flowOn
 import kotlinx.coroutines.flow.flowOn
 import kotlinx.coroutines.isActive
 import kotlinx.coroutines.isActive
+import timber.log.Timber
 
 
 class NetworkConnectivityServiceImpl constructor(
 class NetworkConnectivityServiceImpl constructor(
     val context: Context
     val context: Context
@@ -45,17 +46,22 @@ class NetworkConnectivityServiceImpl constructor(
         networkState = status
         networkState = status
     }
     }
 
 
-    init {
-        connectivityManager.registerNetworkCallback(request, connectivityCallback)
-    }
-
     override val networkStatus: Flow<NetworkStatus?> = callbackFlow {
     override val networkStatus: Flow<NetworkStatus?> = callbackFlow {
+        try {
+            connectivityManager.registerNetworkCallback(request, connectivityCallback)
+        } catch (e: Exception) {
+            Timber.e(e)
+        }
         while (isActive) {
         while (isActive) {
             trySend(networkState)
             trySend(networkState)
             delay(200L)
             delay(200L)
         }
         }
         awaitClose {
         awaitClose {
-            connectivityManager.unregisterNetworkCallback(connectivityCallback)
+            try {
+                connectivityManager.unregisterNetworkCallback(connectivityCallback)
+            } catch (e: Exception) {
+                Timber.e(e)
+            }
         }
         }
     }.distinctUntilChanged().flowOn(Dispatchers.IO)
     }.distinctUntilChanged().flowOn(Dispatchers.IO)