12月小报|读小报,涨知识

本期知识小集的主要内容包括:

  • • Flutter桥调用请注意结果反馈

  • • Flutter await代码带来的潜在并发

  • • Flutter FPS 高不代表一定流畅

  • • Flutter新渲染引擎impeller尝鲜

Flutter桥调用请注意结果反馈

通过桥来拓展Flutter的能力,是非常通用的Flutter开发场景。常见的包括:网络请求,本地存储,异构页面通信等 。实现功能固然重要,但是如果控制不好返回值,可能会是一个灾难。例如:Dart侧代码:

void getResult() async {dynamic result = await MethodChannel('methodChannelName')
.invokeMethod<dynamic>('methodName', {'params': content});
doOtherJobs();
}

Native 侧代码,以Android代码为例:

@Overridepublic void onMethodCall(MethodCall call, Result result) {switch (call.method) {case "methodName": {doJob();break;}}}

如果按上述代码实现,就会出现一个非常隐藏的问题:dart侧代码会一直wait,之后的代码(doOtherJobs)永远不会被执行到了。问题的原因是MethodChannel 并不知道底层的逻辑是否执行完毕。那怎样通知MethodChannel执行完了呢?需要调用如下代码:

如下代码调用任一一个即可
result.success();
result.error();
如果没有对应方法的实现可以调用如下代码:
result.notImplemented();

问题虽小,但是影响可能很大,一定要小心~

Flutter await代码带来的潜在并发

Flutter使用Dart语言进行开发。Dart语言具备非常友好的并发编程语法。例如 async/await。我们在享受并发语法带来便利的同时,也需要深刻理解代码背后的执行逻辑。只有这样,才能避免走入一些“深坑”。首先从最简单的逻辑来看:如果一个函数被标记为 async,意味着该函数会被异步执行,函数会返回一个 Future 对象。函数正常执行的到该函数的时候,并不会停下并等待函数的结果返回,而是直接运行下面的代码。如果想要程序停下,等待函数的执行结果,需要配合await关键字来实现。示例如下:

894944c0209aedea709cb7a8f2edbda8.jpeg

这里有一个非常有意思的问题,使用await 等待异步函数执行,到doJob2函数执行,这中间是不是仅仅执行了doAsyncJob函数内容?来看下面的例子

bool needReturn = false;Future<void> doJob2() async {needReturn = true;}Future<void> doJob() async {if (needReturn) {return;}print('needReturn position1 is $needReturn'); // needReturn == false ?await doSomething();print('needReturn position2 is $needReturn'); // needReturn == false ?}Future<void> doSomething() async {print('doSomething~~~');}
  1. 第一个问题 position1 位置的时候needReturn 是不是一定是false?

答案是yes, 因为needReturn == true 会在之前执行的时候,直接返回。要想执行到position1 ,needReturn一定是false;

  1. 第二个问题 position2 位置的时候needReturn 是不是一定是false?

答案是不一定!为什么不一定呢?doSomething函数中并没有设置needReturn为true。needReturn会被修改么?答案是有可能,原因是doJob2可能在其他控制流中被执行。看起来position2的上一句就是doSomething,但是在await 等待的时候,其他的并发函数也可能被执行,如果doJob2被执行,值就会发生了变化。结论:使用await 并发执行以后,记得一定要做变量的重新检查因为这里虽然代码相邻,但是过程中可能执行大量其他并发函数,核心状态并不像看起来的那么可

Flutter FPS 高不代表一定流畅

流畅滚动是优异体验的核心保障。FPS(Frames Per Second)作为页面流畅度的核心度量指标,被广泛使用。FPS本质上度量的是每秒播放的帧数。下图直观对比不同帧率的显示效果。

404f48ac1a34e2be7b0189a11b1e7ddb.gif
帧率.gif

Flutter开发页面,同样广泛的使用FPS来度量页面流畅度。但是Flutter一直有一个“细碎抖动”的问题,也就是页面整体是流畅的,但是在滚动的过程中有明显的细碎抖动,这对用户体验产生了伤害。在实际开发过程中,FPS这一指标对这类抖动问题的度量效率并不高。例如:前900ms刷了50帧,但是最后100ms刷了1帧,最后的FPS值是51,看起来也是一个不错的值。但是用户会在其中明显感知到卡顿。帧率的连贯性是很重要的,即便刷新只有30帧,但是如果一直是这个帧率,用户感知起来也是流畅的。但是如果一下子从50帧掉到30帧用户还是会感知明显的卡顿。所以流畅度的度量需要感知帧率的变化。那Flutter中怎么感知每一帧的变化呢?可以用如下方法获取每一帧的性能数据数据。

WidgetsBinding.instance.addTimingsCallback();

透过该方法,除了能获取每一帧的整体耗时,还可以细化到build和raster两个主要阶段的耗时。这样能更加深入的做性能问题的排查。数据结构体如下:

factory FrameTiming({required int vsyncStart,required int buildStart,required int buildFinish,required int rasterStart,required int rasterFinish,required int rasterFinishWallTime,int frameNumber = -1,})

那么在知道帧耗时的情况,怎么判定是一次卡顿呢?可以从如下两个维度来度量:

  1. 1. 帧耗时是之前N帧平均耗时的M倍(这里N和M可以根据实际情况调整,例如一般设置成3帧和2倍)

  2. 2. 帧耗时超过两帧电影帧耗时(电影帧单帧耗时:1000ms/24≈41.67ms,这是下线,帧耗时超过这个标准,用户能明显感知到卡顿)

同时我们也可以通过统计不同分位的帧耗时,更细致感知实际页面渲染情况。例如常见的90分位,99分位帧耗时。大家可以根据实际情况统计。

Flutter新渲染引擎impeller尝鲜

接着上面的问题,Flutter有一个 early-onset jank 的公开问题(问题详解可以参见引用【1】)。Flutter页面的抖动问题跟这个问题有着一定的关联。本质上impeller是Skia的一个替代方案。官方在Flutter3.0的版本中首次公开了Impeller的预览版本。同时在Flutter3.3版本中进行了大量完善。目前可以通过如下方式开启:

  1. 1. flutter run 添加 --enable-impeller

  2. 2. Native工程配置

在IOS工程的Info.plist文件中添加如下配置:

<key>FLTEnableImpeller</key><true/>

Android工程,在AndroidManifest.xml添加如下配置:

<meta-dataandroid:name="io.flutter.embedding.android.EnableImpeller"android:value="true" />

那impeller 效果如何呢?从我们初步的测试来看,有如下初步结论:注意目前impeller iOS的成熟度相比Android要高很多。我们只测试了iOS的场景

  1. 1. 从官方Gallery场景来看,优化效果显著,impeller的debug包就有了媲美之前release包的效果。Flutter的细碎抖动问题,在官方Gallery场景上基本解决。滚动流畅性有显著提升。

  2. 2. 由于官方Gallery比较简单,从闲鱼的实际benchmark来看,impeller目前在复杂场景下的性能未超过skia的实现。【测试版本 Flutter3.3.8 手机iPhone 13 Pro】主要原因是impeller目前阶段比较早,很多功能还有待完善,测试过程中也出现了大量渲染错误的问题。impeller距离生产中使用还需时日。

impellerskia
e9db183230b417e8c834b407226da871.png6521c734e2b1d0667c7e5ae28d59dce2.png
raster线程平均帧耗时 5.5msraster线程平均帧耗时 1.9ms

impeller是Flutter根本上解决卡顿问题的重要尝试,虽然目前状态下还有很多的不完善,但是可以明显感受到impeller带来的显著变化,未来可期~

引用

【1】Flutter 新一代图形渲染器 Impeller 

【2】https://github.com/flutter/flutter/wiki/Impeller 

【3】https://docs.flutter.dev/development/tools/sdk/release-notes/release-notes-3.3.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/68440.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用计算机计算的手抄报内容,关于数学计算手抄报

开办手抄报对学生是一项综合性很强的实践活动。下面是学习啦小编为大家带来的关于数学计算手抄报&#xff0c;希望大家喜欢。 数学计算手抄报的图片欣赏 数学计算手抄报图一 数学计算手抄报图二 数学计算手抄报图三 数学计算手抄报图四 数学计算手抄报图五 数学计算手抄报的资料…

计算机教室英语手抄报图片,英语手抄报图片四年级

英语手抄报图片四年级 四年级的小朋友们&#xff0c;下面是有关四年级上册英语单词表图片手抄报内容知识&#xff0c;欢迎大家阅读与了解。 小学四年级上册英语单词表&#xff1a;Unit 1 My Classroom window 窗户  board 写字板  light 灯;管灯  picture 画;图画 door 门…

关于计算机的英语手抄报简单,最简单的英语手抄报图片大全_英语简单手抄报的图片...

当代小学生学习英语最重要的是要掌握交际能力。英语教科书是英语教育输入的重要材料。但是&#xff0c;如今很多学校会组织做英语手抄报来培养学生对英语的兴趣。学习啦小编为大家带来的最简单的英语手抄报图片大全&#xff0c;希望大家喜欢。 最简单的英语手抄报图片欣赏 最简…

英语计算机手抄报图片大全,关于英语手抄报图片简单又整洁

关于英语手抄报图片简单又整洁 手抄报是一种常规性的宣传工具&#xff0c;学生喜欢做英语手抄报来学习英语的知识点&#xff0c;这也是不错的。下面是百分网小编找来的英语手抄报图片资料&#xff0c;一起来看下吧! 简洁的英语手抄报图片 英语手抄报内容&#xff1a;愚人节笑话…

关于计算机的英语手抄报,关于英语手抄报大全

语言是孩子思维的窗口,代表了孩子心理发育的水平,家长都非常关注孩子语言能力的发展,加上如今对外交往的日益增加,大家更加关注孩子英语的学习,大家一起来学习英语&#xff0c;学习啦小编为大家汇总了一些关于英语手抄报大全 &#xff0c;大家可作为参考&#xff0c;希望大家能…

关于计算机互联网的英语小报图片,关于简洁好看的英语手抄报图片

关于简洁好看的英语手抄报图片 英语手抄报旨在宣传英语知识&#xff0c;让更多的人知道英语的重要性&#xff0c;一起来看看吧。下面是百分网小编找来的英语手抄报图片&#xff0c;一起来看下吧! 英语手抄报图片赏析 英语手抄报内容&#xff1a;万圣节的英文作文 “啊呜——不给…

python模拟正方教务系统登录

目录 一、抓包检查请求信息 进入教务系统首先随便输一个号进行抓包&#xff0c;发现default2.axps包是使用post请求 在该文件下找到标头和负载信息 _VIEWSTATE: txtUserName:学号信息 TextBox2:账号密码 txtSecretCode:验证码 RadioButtonList1&#xff1a;身份信息 B…

万豪历经多次数据泄露仍无改观,漏洞百出令消费者担忧

今年&#xff0c;无论是酒店还是航空都是遭受新冠病毒疫情打击最为严重的行业&#xff0c;同时这些行业也是网络安全的重灾区。万豪集团等多家航空公司近年多次曝出数据泄露事件并付出惨重代价&#xff0c;但研究发现仍存在高危风险&#xff0c;数据安全问题似乎仍无任何改观。…

走点心学好设计模式,还做什么 Crud Boy

最近总有读者在后台跟我说&#xff0c;工作几年&#xff0c;自己的代码质量似乎没有什么提升。我觉得他的情况非常典型&#xff0c;很多人应该或多或少都有过类似的经历&#xff1a; 毕业几年&#xff0c;几乎一直在做复制黏贴的工作&#xff1b;偶尔会遇到原有业务扩展的需求&…

网络安全学习常用站点导航-持续更新中

整理了下常用的网站&#xff0c;方便查找&#xff0c;持续更新中&#xff0c;欢迎补充 文章目录 安全论坛知识库其他导航网站&#xff08;套娃&#xff09;靶场CTF平台漏洞复现 SRC空间测绘漏洞信息威胁情报指纹识别 安全论坛 先知安全客创宇PaperFreebuf&#xff0c;酒仙桥六…

因程序员开发速度太慢,公司索赔90万败诉后不服申请再审,法院判了

整理 | 王晓曼 出品 | 程序人生 &#xff08;ID&#xff1a;coder _life&#xff09; 2019年9月10日&#xff0c;北京神州瑞景公司因不满公司某程序员的工作进度和质量&#xff0c;申请了劳动仲裁。同日&#xff0c;北京市朝阳区劳动人事争议仲裁委员会表示不予受理&#xff0c…

朱松纯:三读《赤壁赋》,从人工智能的角度解读“心”与“理”的平衡

朱松纯 北京通用人工智能研究院院长 北京大学讲席教授 清华大学基础科学讲席教授 目录 第一节 引言 人生轨道&#xff1a;跃迁与升华苏轼的哲思&#xff1a;人生的意义什么是活明白当今学子的困惑 第二节 初读文学《赤壁赋》&#xff1a;横槊赋诗 第三节 重读学术《赤壁赋》…

因程序员开发速度太慢,公司索赔 90 万败诉后不服申请再审,法院判了

2019 年 9 月 10 日&#xff0c;北京神州瑞景公司因不满公司某程序员的工作进度和质量&#xff0c;申请了劳动仲裁。同日&#xff0c;北京市朝阳区劳动人事争议仲裁委员会表示不予受理&#xff0c;认为神州瑞景公司的请求事项不符合受理条件&#xff0c;决定不予受理。 神州瑞景…

入职半年后,我升到了管理岗

18年&#xff0c;我创业失败后&#xff0c;准备重新找工作。 通过朋友介绍&#xff0c;还没开始找&#xff0c;就入职了vivo&#xff0c;这应该算是我职场史上最快的找工作经历了。 因为做开发的年限也四五年了&#xff0c;所以&#xff0c;我本想利用这个机会转管理岗的&…

亚马逊用了12年,却只推出漏洞百出的Goodreads…

全文共3919字,预计学习时长8分钟 来源: bookriot.com Goodreads是最大的文学社交媒体网络。它本应是一个很好的读者聚集地。它是一个只有读书爱好者的在线社区,但是根据用户的投诉,以及基本的调查结果显示,Goodreads这种明显的垄断性服务似乎阻止了其创新。结果 ,它没有为…

iOS8升级漏洞百出 苹果首席“捉虫师”难逃其咎

苹果日前为iPhone与iPad升级操作系统时&#xff0c;似乎遇到许多漏洞。升级为iOS 8.0.1后&#xff0c;许多用户无法打电话、无法使用Touch ID和指纹传感器等&#xff0c;几乎导致苹果取消更新。 如果苹果CEO蒂姆库克(Tim Cook)要为这些失败找个责任人&#xff0c;高级工程师金沃…

财报漏洞百出前后不一,大烨智能是“粗心大意”还是“欲盖弥彰”?

“【报名】数据猿年度精彩活动推荐&#xff1a;访谈调研企业盘点榜奖峰会&#xff0c;与数据猿共筑2021 大数据产业创新服务媒体 ——聚焦数据 改变商业 近日&#xff0c;大烨智能发布了2021年第一季度报告。截止报告期内&#xff0c;大烨智能实现营收为60,285,025.47元&#…

20 | WAF:如何为漏洞百出的Web应用保驾护航?

如果你细心观察的话&#xff0c;应该会发现&#xff0c;随着 Web 应用越来越多&#xff0c;黑客的攻击目标也逐渐转向了针对 Web 安全的攻击。传统的防火墙主要专注于网络层的攻击防御&#xff0c;对 Web 安全的防御能力相对欠缺。因此&#xff0c;WAF&#xff08;Web Applicat…

!大部分程序员只会写3年代码

程序员与别的专业有所不同&#xff0c;其他专业都是越老越香&#xff0c;而程序员却是一个例外&#xff0c;因为计算机技术更新太快&#xff0c;而且工作强度很大&#xff0c;因此大部分程序员只会写 3 年代码。3 年后要不晋升做项目经理&#xff0c;要么转行&#xff0c;个别研…

Qt之QGraphicsView实现截图(漏洞百出且BUG丛生版,部分源码+注释)

文章目录 一、截图操作示例图1.图元绘制示例2.文本添加操作示例3.设置操作示例4.截图拖动示例5.文件保存示例6.剪切板粘贴示例 二、内容指路和思路三、部分源码1.自定义文本框源码2.多类型图形数据的存储3.截图源码 总结相关文章 一、截图操作示例图 1.图元绘制示例 下方一次…