Browse Source

修复部分子线程开启作用域崩溃

drake 3 years ago
parent
commit
5595351473

+ 9 - 6
net/src/main/java/com/drake/net/scope/AndroidScope.kt

@@ -20,6 +20,7 @@ import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleEventObserver
 import androidx.lifecycle.LifecycleOwner
 import com.drake.net.Net
+import com.drake.net.utils.runMain
 import kotlinx.coroutines.*
 import java.io.Closeable
 import kotlin.coroutines.CoroutineContext
@@ -36,11 +37,13 @@ open class AndroidScope(
 ) : CoroutineScope, Closeable {
 
     init {
-        lifecycleOwner?.lifecycle?.addObserver(object : LifecycleEventObserver {
-            override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
-                if (lifeEvent == event) cancel()
-            }
-        })
+        runMain {
+            lifecycleOwner?.lifecycle?.addObserver(object : LifecycleEventObserver {
+                override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
+                    if (lifeEvent == event) cancel()
+                }
+            })
+        }
     }
 
     protected var catch: (AndroidScope.(Throwable) -> Unit)? = null
@@ -52,7 +55,7 @@ open class AndroidScope(
     val scopeGroup = exceptionHandler
 
     override val coroutineContext: CoroutineContext =
-            dispatcher + exceptionHandler + SupervisorJob()
+        dispatcher + exceptionHandler + SupervisorJob()
 
 
     open fun launch(block: suspend CoroutineScope.() -> Unit): AndroidScope {

+ 8 - 5
net/src/main/java/com/drake/net/time/Interval.kt

@@ -23,6 +23,7 @@ import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleEventObserver
 import androidx.lifecycle.LifecycleOwner
 import com.drake.net.scope.AndroidScope
+import com.drake.net.utils.runMain
 import com.drake.net.utils.scope
 import kotlinx.coroutines.ObsoleteCoroutinesApi
 import kotlinx.coroutines.channels.ReceiveChannel
@@ -205,11 +206,13 @@ open class Interval(
         lifecycleOwner: LifecycleOwner,
         lifeEvent: Lifecycle.Event = Lifecycle.Event.ON_STOP
     ) = apply {
-        lifecycleOwner.lifecycle.addObserver(object : LifecycleEventObserver {
-            override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
-                if (lifeEvent == event) cancel()
-            }
-        })
+        runMain {
+            lifecycleOwner.lifecycle.addObserver(object : LifecycleEventObserver {
+                override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
+                    if (lifeEvent == event) cancel()
+                }
+            })
+        }
     }
     //</editor-fold>