Flutter延时任务、Flutter通过Future与Timer实现延时任务
题记
—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天。
本文是异步编程的延时策略篇章,在Flutter中实现延时操作有两种方式,一种是通过Future,另一种是通过Timer。
***
1 Future
在Flutter中实现延时 1秒的操作,使用Fluture来实现,代码如下:
///代码清单 1-1
///方式一
///参数一 延时的时间
///参数二 延时执行的方法
Future.delayed(Duration(milliseconds: 1000), () {
print("延时1秒执行");
});
///代码清单 1-2
///方式二
Future.delayed(Duration(milliseconds: 1000)).whenComplete((){
print("延时1秒执行 whenComplete ");
});
///代码清单 1-3
///方式二
Future.delayed(Duration(milliseconds:1000)).then((value){
print("延时1秒执行 then ");
});
在上述代码清单 1-1、1-2、1-3中分别展示了使用Future的延时操作的三种方式,这三种方式 是小编实现延时操作的一些思路,一般建议使用代码清单1-1中所示的第一种,对于代码清单1-2与1-3中所示的whenComplete与then函数,功能更强大,应当用到合适的位置。
Future的then函数返回值类型为一个Future对象,所以支持链式调用,组合在一起就是串行方式调用,如下代码块 1-4 中所示:
///代码清单 1-4
Future.delayed(Duration(milliseconds: 1000), () {
print("延时1秒执行");
return Future.value("测试数据");
}).then((value) {//函数一
print(" then $value");
return Future.value("测试数据 2");
}).then((value) {///函数二
print(" then $value");
return Future.value("测试数据 2");
}).then((value) {//函数三
///value 就是 函数一中回传的值
print(" then $value");
});
假如在then函数中任何一个环节出现了异常,那么后续的函数将会被中断执行(如清单1-4中的then函数一出现了问题,then函数二与三就都不会执行)相当于是程序线程停止在这里了,对于手机界面来讲就是无响应或者是红屏显示。
在代码清单1-3中所示的whenComplete方法,并返回一个Future,类似于try-catch-finally中的finally块,所以用whenComplete来结尾多个异步操作是一个合适的解决方案,如下代码清单1-5所示
/// 代码清单 1-5
Future.delayed(Duration(milliseconds: 1000), () {
print("延时1秒执行");
return Future.value("测试数据");
}).then((value) {//函数一
print(" then $value");
return Future.value("测试数据 2");
}).then((value) {///函数二
print(" then $value");
throw 'Error!';
return Future.value("测试数据 3");
}).then((value) {//函数三
///value 就是 函数一中回传的值
print(" then $value");
}).catchError((err) {
print('Caught $err'); // Handle the error.
},test: (e){
print('Caughte $e'); // Han
return e is String;
}).whenComplete((){
print("程序执行完成");
});
在代码清单 1-5中也使用到了catchError函数,在这里,当then这几个函数中任何一个处理出现 异常,都会回调此方法,如这里在函数二中通过 throw抛出的一个异常,在catchError函数中捕捉到这个异常,然后回调test方法块,再回调catchError的参数一的函数处理,类似try-catch-finally中的catch,它的定义如下代码清单1-6所示:
/// 代码清单 1-6
Future<T> catchError(Function onError, {bool test(Object error)});
2 Timer
通过Timer来实现延时2秒的操作,如下代码清单 2-1 所示:
///延时2秒
Timer timer = new Timer(Duration(milliseconds: 2000), (){
});
相比来讲 Future中实现的延时操作也是通过Timer来实现的,在实际开发中,如果只是一个单纯的延时操作,小编建议使用Timer,如下代码清单2-2所示,在当前Widget销毁时取消延时任务,可避免内存泄漏。
class _TimerDelayedTestPageState extends State{
///声明
Timer timer;
@override
void initState() {
super.initState();
///延时2秒
timer = new Timer(Duration(milliseconds: 2000), (){
});
}
@override
void dispose() {
///取消延时任务
timer.cancel();
super.dispose();
}
... ...
}
***
完毕
- 分享本站右侧 “类Metro风格侧边栏” 的实现方法
- [C#1] 1-Hello World
- 代码审查工具StyleCop
- 实用工具特别推荐 Robocopy GUI
- 七牛镜像存储 WordPress 插件 的代码化
- WordPress 会自动压缩JPEG 格式的图像?
- jquery操作DOM 元素(2)
- WordPress 中部署真正的懒加载(Lazy Load)
- 图形化的2008R2 Server Core 配置管理工具
- 各种浏览器的userAgent
- WordPress 根据浏览器 user-agent 按需加载CSS 文件
- memcached的最新状态
- [程序设计语言]-01:引言
- ASP.NET Ajax 库
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 运维人员常用的Linux命令总结
- Java反射机制的原理及在Android下的简单应用
- 温故而知新:MySQL存储引擎入门介绍
- 终于明白 Java 为什么要加 final 关键字了!
- 学习git这一篇就够了!!!
- 如何在nodejs中实现兄弟进程通信
- Python异常处理
- Python装饰器实现函数动态类型检查
- 如何自动填充SQL语句中的公共字段
- 面试官喜欢问的Java编译期与运行期问题总结全了
- 面试5年25K程序员回答不出来为什么Java的main方法必须是public static void?
- Python装饰器
- 3分钟短文:十年窖藏,Laravel告诉你表单验证的“正确姿势”
- 面试官:说说SpringBoot中Spring容器的启动过程
- Python IO