瀏覽代碼

Fixed #80

drake 3 年之前
父節點
當前提交
620436c7b1
共有 2 個文件被更改,包括 14 次插入17 次删除
  1. 9 11
      net/src/main/java/com/drake/net/time/Interval.kt
  2. 5 6
      net/src/main/java/com/drake/net/utils/Scope.kt

+ 9 - 11
net/src/main/java/com/drake/net/time/Interval.kt

@@ -20,7 +20,6 @@
 package com.drake.net.time
 package com.drake.net.time
 
 
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.Fragment
-import androidx.fragment.app.FragmentActivity
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleEventObserver
 import androidx.lifecycle.LifecycleEventObserver
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.LifecycleOwner
@@ -200,11 +199,11 @@ open class Interval(
     /**
     /**
      * 自动在指定生命周期后取消[cancel]轮询器
      * 自动在指定生命周期后取消[cancel]轮询器
      * @param lifecycleOwner 生命周期持有者, 一般为Activity/Fragment
      * @param lifecycleOwner 生命周期持有者, 一般为Activity/Fragment
-     * @param lifeEvent 取消轮询器的时机, 默认为 ON_STOP 界面停止时停止轮询器
+     * @param lifeEvent 销毁生命周期, 默认为 [Lifecycle.Event.ON_DESTROY] 时停止时停止轮询器
      */
      */
     fun life(
     fun life(
         lifecycleOwner: LifecycleOwner,
         lifecycleOwner: LifecycleOwner,
-        lifeEvent: Lifecycle.Event = Lifecycle.Event.ON_STOP
+        lifeEvent: Lifecycle.Event = Lifecycle.Event.ON_DESTROY
     ) = apply {
     ) = apply {
         runMain {
         runMain {
             lifecycleOwner.lifecycle.addObserver(object : LifecycleEventObserver {
             lifecycleOwner.lifecycle.addObserver(object : LifecycleEventObserver {
@@ -217,15 +216,14 @@ open class Interval(
 
 
     /**
     /**
      * 自动在指定生命周期后取消[cancel]轮询器
      * 自动在指定生命周期后取消[cancel]轮询器
-     * 销毁生命周期为[Lifecycle.Event.ON_DESTROY]
+     * @param lifeEvent 销毁生命周期, 默认 [Lifecycle.Event.ON_DESTROY] 时停止时停止轮询器
      */
      */
-    fun life(activity: FragmentActivity) = life(activity, Lifecycle.Event.ON_DESTROY)
-
-    /**
-     * 自动在指定生命周期后取消[cancel]轮询器
-     * 销毁生命周期为[Lifecycle.Event.ON_STOP]. 因为Fragment多数情况下不会触发[Fragment.onDestroy]
-     */
-    fun life(fragment: Fragment) = life(fragment, Lifecycle.Event.ON_STOP)
+    fun life(
+        fragment: Fragment,
+        lifeEvent: Lifecycle.Event = Lifecycle.Event.ON_DESTROY
+    ): Interval {
+        return life(fragment.viewLifecycleOwner, lifeEvent)
+    }
 
 
     /**
     /**
      *  当界面不可见时暂停[pause], 当界面可见时继续[resume]. 不会自动[start]轮询器
      *  当界面不可见时暂停[pause], 当界面可见时继续[resume]. 不会自动[start]轮询器

+ 5 - 6
net/src/main/java/com/drake/net/utils/Scope.kt

@@ -71,10 +71,10 @@ fun LifecycleOwner.scopeLife(
  * @param dispatcher 调度器, 默认运行在[Dispatchers.Main]即主线程下
  * @param dispatcher 调度器, 默认运行在[Dispatchers.Main]即主线程下
  */
  */
 fun Fragment.scopeLife(
 fun Fragment.scopeLife(
-    lifeEvent: Lifecycle.Event = Lifecycle.Event.ON_STOP,
+    lifeEvent: Lifecycle.Event = Lifecycle.Event.ON_DESTROY,
     dispatcher: CoroutineDispatcher = Dispatchers.Main,
     dispatcher: CoroutineDispatcher = Dispatchers.Main,
     block: suspend CoroutineScope.() -> Unit
     block: suspend CoroutineScope.() -> Unit
-) = AndroidScope(this, lifeEvent, dispatcher).launch(block)
+) = AndroidScope(viewLifecycleOwner, lifeEvent, dispatcher).launch(block)
 //</editor-fold>
 //</editor-fold>
 
 
 // <editor-fold desc="加载对话框">
 // <editor-fold desc="加载对话框">
@@ -204,15 +204,14 @@ fun LifecycleOwner.scopeNetLife(
 /**
 /**
  * 和[scopeNetLife]功能相同, 只是接受者为Fragment
  * 和[scopeNetLife]功能相同, 只是接受者为Fragment
  *
  *
- * Fragment应当在[Lifecycle.Event.ON_STOP]时就取消作用域, 避免[Fragment.onDestroyView]导致引用空视图
- * @param lifeEvent 指定LifecycleOwner处于生命周期下取消网络请求/作用域
+ * @param lifeEvent 生命周期事件, 默认为[Lifecycle.Event.ON_DESTROY]下取消协程作用域
  * @param dispatcher 调度器, 默认运行在[Dispatchers.Main]即主线程下
  * @param dispatcher 调度器, 默认运行在[Dispatchers.Main]即主线程下
  */
  */
 fun Fragment.scopeNetLife(
 fun Fragment.scopeNetLife(
-    lifeEvent: Lifecycle.Event = Lifecycle.Event.ON_STOP,
+    lifeEvent: Lifecycle.Event = Lifecycle.Event.ON_DESTROY,
     dispatcher: CoroutineDispatcher = Dispatchers.Main,
     dispatcher: CoroutineDispatcher = Dispatchers.Main,
     block: suspend CoroutineScope.() -> Unit
     block: suspend CoroutineScope.() -> Unit
-) = NetCoroutineScope(this, lifeEvent, dispatcher).launch(block)
+) = NetCoroutineScope(viewLifecycleOwner, lifeEvent, dispatcher).launch(block)
 
 
 
 
 //</editor-fold>
 //</editor-fold>