Flutter样式定时任务插件style_cron_job的使用
Flutter样式定时任务插件style_cron_job的使用
标题
Flutter样式定时任务插件style_cron_job的使用
内容
Style Cron Job 是一个用于执行和定义周期性操作的插件,具有基本语法。你可以定义周期,并通过自己的执行器或控制器来运行你的过程。
-
功能
- 对于第二、分钟、小时、天、周和月时间点,你可以指定诸如“每 x 在 y 时间”或“每隔 x,在 y 时间”这样的周期。
- 它有一个简单的语法,接近口语化。
- 例如:
这两个都表示“每天 1:20:00”。each.day.atHour(10).atMinute(20); every.x(1).day.atHour(10).atMinute(20);
-
工作原理
- 它基本上使用了每秒检查一次的机制(Stream.periodic)。如果有必要,就会开始执行过程。每次检查都是一个小过程,结束时大约需要 ~0.0012 ms (60k 检查在 77ms)。
- 为了减少内存消耗,它需要每秒检查一次,而不是使用 Future.delayed 或 Timer 直到下一个时间,这是其他方法。
-
附加条件
- 可以定义附加条件,如:
each.day.atHour(10).atMinute(20).only((time) { return time.weekday != 7; // 除了星期日 });
- 可以定义附加条件,如:
开始使用
1)定义周期
有 2 种不同的选项来开始定义周期:each
和 every
。
each
用于每月、每周、每天、每小时、每分钟和每秒。every
用于每 3 天一次、每 2 个月一次等需求。
each.**
every.x(3).**
**
必须是month
、week
、day
、hour
、minute
、second
,对于两者来说。
在子时间段中指定运行时间
例如“每天 1:20:30”
each.day.atHour(10).atMinute(20).atSecond(30);
默认的 hour
、minute
和 second
是 0
。 默认的 weekday
、day
是 1
。
at*
子时间段可以按顺序使用。
生成子时间段
你可以使用特定时间的子时间段。
each.day.fromNowOn(DateTime.now());
each.day.fromNowOn(); // 默认 DateTime.now()
2)启动
- 监听
var period = each.day.onMinute(10); period.listen((t) { // 每天 00:10 }); period.dispose();
- Stream
var stream = each.minute.fromNowOn().asStream(); // eg startinging 00:10:38 stream.listen((time){ // 每分钟 38.秒 }); // 不要忘记 stream.cancel();
- Controller
控制器管理所有操作与单个流。因此这是最有效的使用方式。
var runner = CronJobController(); runner.add(each.second.asRunner((time) { // 每秒 })); runner.add(every.x(1).second.asRunner((time) { // 每 1 秒 })); // 启动 runner.start();
- 自定义
你可以通过时间检查周期是否需要调用。
var period = each.second.period; var necessary = period.isNecessary(DateTime.now()); if (necessary { // 做 }
使用示例
- 每周六晚上 11:45(11:45 PM)
each.week.onWeekDay(6).atHour(22).atMinute(45);
- 每周一早上 9:00
each.week.onWeekDay(1).atHour(9);
- 每月 15 日早上 9:00
each.month.onDay(15).atHour(9);
- 每隔 3 天 00:00:59
every.x(3).day.atSecond(59);
示例代码
/*
* Copyright 2styledart.dev - Mehmet Yaz
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
import 'package:style_cron_job/style_cron_job.dart';
void main() {
every.x(10).second.listen((time) {
print(time);
// 2:24:13.101423
// e:2:24:23.101423
// e:2:24:33.101420
});
}
更多关于Flutter样式定时任务插件style_cron_job的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复