Future.delayed(new Duration(seconds: 2), () {

return “Rikka The World”;

}).then((data) {

print(data);

});

Future.then是在delayed方法执行完后再执行的

Future.catchError

如果异步任务发生错误,我们可以在catchError中捕获错误

Future.delayed(new Duration(seconds: 2), () {

throw AssertionError(“Error!”);

}).then((data) {

print(“Success”);

}).catchError((e) {

print(e);

});

如果捕获到异常,then的代码就不会走了。

上述代码中,我们使用 catchError来捕获错误,但是不仅仅catchError可以捕获,我们也可以使用then里面的参数来捕获:

Future.delayed(new Duration(seconds: 2), () {

throw AssertionError(“Error!”);

}).then((data) {

print(“Success”);

}, onError: (e) {

print(e);

});

Future.whenComplete

我们会遇到无论异步执行成功或失败都要做的一些事的场景,比如在网络请求前加载对话框,或者在请求结束后关闭对话框,这种场景,有两种方法。第一种是分别在 then或者 catch中关闭一下对话框,第二种就是使用 FuturewhenComplete回调。

Future.delayed(new Duration(seconds: 2), () {

throw AssertionError(“Error!”);

}).then((data) {

print(“Success”);

}, onError: (e) {

print(e);

}).whenComplete((){

//无论成功还是失败都会走到这里

});

就有点像Java中的 try-catch-finally 中的finally

Future.wait

有些时候,我们需要等待多个异步任务都执行结束后才进行一些操作。那这些操作我们应该在代码的哪个地方使用呢?答案就是使用Future.wait,它接收一个Future数组参数,等待数组中所有的 Future都执行成功后,才会触发 then 的成功回调,只要有一个Future执行失败,就会触发错误回调。示例如下:

Future.wait([

//第一个耗时操作

Future.delayed(new Duration(seconds: 3), () {

return “Rikka”;

}),

//第二个耗时操作

Future.delayed(new Duration(seconds: 5), () {

return “The World”;

}),

]).then((results) {

print(results[0] + results[1]);

}, onError: (e) {

print(e);

}).whenComplete(() {

//无论成功还是失败都会走到这里

});

5s后的输出结果为: Rikka The World

2. Async/await

Dart中的 async/await

回调地狱(Callback Hell)

如果代码中有大量异步逻辑,并且出现大量异步任务依赖其它异步任务的结果时,必然会出现Future.then回调中套回调情况。

JS中就是有这样的诟病,但是随着 Promise、async、await的出现,这样的嵌套回调问题被解决。

学习文档中有个例子,有种登录情况,登录成功会获得用户ID,然后通过用户ID,再去请求用户个人信息,获取到用户个人信息后,为了使用方便,我们需要将其缓存在本地文件系统,代码如下:

//先分别定义各个异步任务

Future login(String userName, String pwd){

//用户登录

};

Future getUserInfo(String id){

//获取用户信息

};

Future saveUserInfo(String userInfo){

// 保存用户信息

};

用在Future中:

login(“Rikka”,“******”).then((id){

//登录成功后通过,id获取用户信息

getUserInfo(id).then((userInfo){

//获取用户信息后保存

saveUserInfo(userInfo).then((){

//保存用户信息,接下来执行其它操作

});

});

})

我们可以使用Future来消除这种情况:

login(“Rikka”,“******”).then((id){

return getUserInfo(id);

}).then((userInfo){

return saveUserInfo(userInfo);

}).then((e){

//执行接下来的操作

}).catchError((e){

//错误处理

print(e);

});

也可以使用 async/await来消除这种情况:

task() async {

try{

String id = await login(“Rikka”,“******”);

String userInfo = await getUserInfo(id);

await saveUserInfo(userInfo);

//执行接下来的操作

} catch(e){

//错误处理

print(e);

}

}

  • async

表示函数时异步的,定义的函数是一个 Future对象,可以使用teh来添加回调函数

  • await

后面是一个Future任务,等待异步任务完成,才会往下走

await必须出现在async内部

3. Stream

Stream同样用于异步事件的处理,和 Future不同的是,它可以接受多个异步操作的结果。常用于网络内容下载、文件读写的场景。

Stream.fromFutures([

//1s后返回结果

Future.delayed(new Duration(seconds: 1), () {

return “hello 1”;

}),

//2s后抛出一个异常

Future.delayed(new Duration(seconds: 2), () {

throw AssertionError(“error”);

}),

Future.delayed(new Duration(seconds: 3), () {

return “hello 3”;

})

]).listen((data) {

print(data);

}, onError: (e) {

print(e.message);

}, onDone: () {});

输出结果为:
hello 1
Error
hello 3

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

总结

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2021最新面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。

2020面试真题解析
腾讯面试真题解析

阿里巴巴面试真题解析

字节跳动面试真题解析
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

14套腾讯、字节跳动、阿里、百度等2021最新面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。

[外链图片转存中…(img-xVP2fmkW-1712265915580)]
[外链图片转存中…(img-L1SRsDmV-1712265915580)]

[外链图片转存中…(img-w0FnB6jg-1712265915580)]

[外链图片转存中…(img-pExQH2nU-1712265915581)]
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐