Browse Source

Interval计时器添加cancel函数

drake 3 years ago
parent
commit
130321eb0a

+ 5 - 4
docs/interval.md

@@ -32,12 +32,13 @@ interval.subscribe {
 |-|-|
 | start | 开始轮循器 |
 | stop | 停止 |
-| pause | 暂停轮循器 |
-| resume | 继续轮循器 |
-| reset | 重置轮循器 |
+| cancel | 取消, 区别于stop, 此函数执行后并不会回调finish |
+| pause | 暂停 |
+| resume | 继续 |
+| reset | 重置 |
 | switch | 切换开关 |
 | subscribe | 每次计时都会执行该回调 |
-| finish | 当计时器完成时执行该回调 |
+| finish | 当计时器完成时执行该回调, 执行stop后也会回调 |
 
 自动取消(感知生命周期)
 

+ 20 - 10
net/src/main/java/com/drake/net/time/Interval.kt

@@ -35,17 +35,17 @@ import java.util.concurrent.TimeUnit
  * 轮循器
  *
  * 操作
- * 1. 开启: 只有在闲置状态下才可以开始
- * 2. 停止
- * 3. 暂停
- * 4. 继续
- * 5. 重置: 重置不会导致轮循器停止
- * 6. 开关: 开启|暂停切换
- * 7. 生命周期
+ * 1. 开启 [start] 只有在闲置状态下才可以开始
+ * 2. 停止 [stop]
+ * 3. 暂停 [pause]
+ * 4. 继续 [resume]
+ * 5. 重置 [reset] 重置不会导致轮循器停止
+ * 6. 开关 [switch] 开启|暂停切换
+ * 7. 生命周期 [life]
  *
  * 回调: 允许多次订阅同一个轮循器
- * 1. 每个事件
- * 2. 停止或者结束
+ * 1. 每个事件 [subscribe]
+ * 2. 停止或者结束 [finish]
  *
  * @param end 结束值
  * @param period 计时器间隔
@@ -116,7 +116,6 @@ open class Interval(
         launch()
     }
 
-
     /**
      * 停止
      */
@@ -130,6 +129,17 @@ open class Interval(
         count = start
     }
 
+    /**
+     * 取消
+     * 区别于[stop]并不会执行[finish]
+     */
+    fun cancel() {
+        if (state == IntervalStatus.STATE_IDLE) return
+        state = IntervalStatus.STATE_IDLE
+        scope?.cancel()
+        count = start
+    }
+
     /**
      * 切换轮循器开始或结束
      */

+ 1 - 0
sample/src/main/java/com/drake/net/sample/ui/fragment/SuperIntervalFragment.kt

@@ -62,6 +62,7 @@ class SuperIntervalFragment :
             R.id.reset -> interval.reset()
             R.id.switch_interval -> interval.switch()
             R.id.stop -> interval.stop()
+            R.id.cancel -> interval.cancel()
         }
         return super.onOptionsItemSelected(item)
     }

+ 4 - 2
sample/src/main/res/menu/menu_interval.xml

@@ -27,11 +27,13 @@
     <item
         android:id="@+id/reset"
         android:title="重置" />
-
     <item
         android:id="@+id/switch_interval"
-        android:title="结束" />
+        android:title="切换" />
     <item
         android:id="@+id/stop"
         android:title="结束" />
+    <item
+        android:id="@+id/cancel"
+        android:title="取消" />
 </menu>