Flutter在iOS上采用Metal驱动GPU


前言

Flutter1.17正式发布

关于1.17正式版

运用功能和包巨细优化

此版别的首要重点是在功能和内存改进方面持续进行全面优化作业。只需将运用程序升级到此版别,用户就会看到更快的动画,更小的运用程序Q } ( b和更低a O 6 [ ! Z @ P的内存占用率。在此i n q = . q ` 4版别中,默许导航情况(不透明导航栏)的速度将进步20%-37%。对于简略的iOS动画,最多削减` P h h K40%的CPU / Gt { L QPU运用率,详细下降多少取决于硬件(在PR 14104和PR 13976中进行了详细介绍)。

此版别还供给了一个较大的运用程序巨细的改s 3 (进,是由于几Q o , M处问题修正导致包增大的结果。例如,Android的Flutt$ y I W j CerGallery示例在2019年底为9.6MB,现在为8.1MB,削减了18.5%。

对于内/ – @ i存运用,此版别将快速翻滚浏览大图像削减了70%的内存,这也直接使运用功能进步,详细取决于设备的内存量。

Flutter在iOS上采用Metal驱动GPU

Metal支撑可将iOS的功能进步50%

苹果公司在7 ! (iOS上对Metal的支撑简A e *直能够直接拜访底层GPU,并且是苹果公司引荐的图形API。在完全支撑Metal的iOS设备上,FH i 7 J ~ b Nlutter现在在默许情况下会优先运用它,这使您的Flutter运用程序大多数情况下运转得更快,平均将烘托速度进步x @ ) J W | B b了约50%(取决于烘托的作业量_ e % l)。

Flutter在iOS上采用Metal驱动GPU

对于– , z @ v $ : V不完全支撑Metal的设备(A7处理C 7 H ) L器之前的版别8 C R D 8 P或运转10之前的iOS版别的设备),Flutter会像曩昔一样运用OpenGL,从而为较旧的设备供给本地烘托速度。

新增Widgets:NavigationRD ] c L G z [ oail,DatePicker等

在此版别中,Flutter添加NavigationRail了一个新| 4 v e $ 0 } $ g的小部件,该小部件X V W r b ` : 9供给了响应式运用程序导航。它是由Google Material Design团队设计和开发的。该NavigationRail是优秀的,由于它很简单切换运用程序BottomNavigato,从另一个途径将运用程序的可见屏幕尺度的增大。

其它部件请参阅顶部链接深入了解;

Material文本比例:使Flutter文本主题现代化

在此版别中,Flutter团队完成了2018 Material Design标准的Type Scale部分的完成,一起没有破坏现有的Flutter运用程序{ y H * u ^ a。2018年10月的PR 22330中增加了对新装备的挑选参加支撑,但不对新称号供给支撑。现有的文本款式称号未更改,由于这样做是一个重大的API更改,或许会影响@ o L & V大多数运用程序。此版别更新了TextThemeAPI以匹配当前的Material标准,但保留了旧称号,以使您的代码不会中断。但是,旧称号已被弃用,因而您在运用的时分将收到正告,t _ _ x以提醒您在开发时采用新称号.

Google字体用于Flutter

文字和字体齐H ? L ) [头并进,因而,假如您对新的Material Text Scale完成有爱好,那么您或许也会对新的Flutter v1.0版Google字体有同样的爱好。

Google字体允许开发人员在其运用中轻松地测验和运用fonts.google.com中的任何字体。当运用c y 程序预备发布时,开发人员将决议用户是否通过从API下载字体来接收字体,或者它与运用程序包预先捆绑在一起。

可拜访性和国际化

在此发行版中,咱们已完成了悉数作业,包含翻滚,文本 字体和其他输入小部件的可拜访性修正程序等w R q m 9 P。您将在GitHub的该版别中看到有关可拜访性问题的完好列表。咱们引荐您测验自己的运用程序的可拜访性,并且还通过一些引荐的最佳实践更新了此版别中的文档。

东西:Dart DevTools移植到Flutter,Az 8 k ( t Zndroid快速入门等

此版别使咱们将Dart DevTools的当前版别换成新的Flutter版别。假如您想测验一下,请发动DevTools并单击DevTools右上角的“烧杯”图标。

Flutter在iOS上采用Metal驱动GPU

Devtools还有其它很多有趣的更新等待你的开掘。

详细请参阅链接文章进行实践;实践会让你看到比任何文章更好的介绍;

1.17中 FlutterN E – 7 和 Metal

此处是文章重点翻译内容

Flutter引擎在iOS上将迁移到运用Metal烘托API,而不j # a是运用OpenGL;

为什么运用Metal ?

一个Flutter用户界面通过运用加速图形API拜访渠@ C 9 7 % V道上的GPU显示在屏幕上。这个API是iOS上OpenGL E= 4 O s ) W vS的一个版f % + | f ( Y S 8别。跟着iOS 12的引进,Open7 ] J y g e Y 3GL ES和相关的api在2018年被苹果正式否决。Metau q q 7 8 ( ?l现在是iOS和Mac上( | u Z @ o } h r低级别、低开支烘托的引荐| F A , ] B I y uAPI。尽管OpenGL的跨渠道方面的确很有用,但Fluttw L u { x j U p ,er团队也很看好Metal计划。OpenGL ES的不受欢迎好像也导{ C o致了iOS上的OpenGL驱动程序维护得不太好。iOS特有的OpenGL问题呈现了上升趋` } e势,这些问题越来越难调试,而且不太或许得到修正。根据这些H M A # N ) g原因,在iOS上向Meth U v 9 * [al迁移势在必行。

在什么版别上flutter会运用Metal?

Flutter的Metal烘托将用于苹果A7设备或运转iOS10或更高版别的设备。当不能运用Metal时,会降级运用OpenGL。

为什么Flutter不能在一切iOS机型运用Metal?

Flutter现在支撑在iOS 8及以上版别上运转。这包含Metal自身不可用的设备。详细来说,Metale m S只在苹果A7或更高版别的iOS设备上可用。这将扫除像iPhone 5C这样能够升级到iOV Q x $ vS 10但只有Apple A6 SOC的设备。一项要求在任何地方都运用Metal的方针意味着咱T M Q 3 V R Y E们将不得不放6 3 T u W j m W z弃一些机型。这不是Flutter现在预备 j & 6考虑的适配问题。

还有些问题是少量支撑8到10之间O T 7 F t O G _ liOS版别的设备,这些设备具有Apple A7 SOC(或更高版别),但尚未更新到最新的iOS版别。Flutter在技术上也能够在这些设备上运A k y ? t J K *用Metal,但现在还没有。这是由于早期版别的iOS上的Metal API对于Flutter所需的特性(特别是Flutter所运用的Skia烘托库)的表现力不行。这需求为双源混合等0 0 3 $ t 0 9情况创立解决计划或a s D 9 备用计划。为了削减完成和测验负担,决议挑选iOS 10作为基准。如有必要,能够修改这项决议。(也就意味着只要是A7以上,理[ t |论上来说是都能够运用Metal进行烘托)

这是否改变了Flutter支撑的iOS的最低版别?

不。Flutter将在较新的设备和iOS版别上运用Metal,但OpenG5 E _ DL后端坚持原样。当Metal不可用时运用,是一个代替计划。

作为一个Flutterr Y % $ p ; H l J开发者,我需求做些什么来迁移到iOS上运用Metal呢?

除了您的运用程序在引擎下运用OpenGL对Flutter做出假定的或许性十分小的处理情况之外,一般不需求开发者进行特意的适配。更新的Flutter引擎不需求对Flutter运用程序或其嵌入方法进行任何更改。

是否由于, ! ; V E Z d添加了Metal支撑而对二进制巨细产生影响?

对。未紧缩的Flutter引擎二进制文件的巨细将增加约250KB。将持续对这个巨细进行增量减缩,但要进行显著减缩,需求删去OpenGL后端。现在Flutter团队还没有考虑这个问题。

摄像头预览、视频播映、webview、地图等插件是否能持续作业?

对。这些插件不需求K | x ; i F { H更新,它们将持续按预期作业。Flutter plugins repo中的一切插件都已通过测验,能够与Metal后端协同作业。

怎么判别我的运用程序是否在引擎下运用OpenGL对Flutter进行了修改?

Flutter运用的烘托API是Flutter引擎的一个完成细节。但是,Flutter的确为底层渠道供给了在Flutter层次中为内联组成供给纹路的才能。开发人员(或插件)通过在他们的运用程序中运用一个纹路j _ ; L K小部件并编写一些特定于渠道的代码来供给和更新这些纹路。假如操作供给给Fl$ X _ ` l [ [ /utter引擎的纹路的渠道特定代码没有指定纹路能够与Metal API互操作,则这些纹路的内联组合或许会失利。有关确保纹s 5 Y N l Y a M路可与金属互操作的指导,请遵循有关怎么“创立可互操作纹路”的文档。详细来说,在创立描述纹路的像素缓冲区时,除了kcppixelbufferopenglcompatibilitykey键之外,还必须指定kcppixelbuffermej : G 0 , t 8talcompatibilitykey键。

假如运用程序不运用纹路小a L e d部件,则无需履行任何操作。假如是这样,则必须检查供给给Fl5 O 0 ; ,utter的纹路,以确保它们z # ? a % g能够与Metalz [ { i @互操作。

这是一个十分共同的用例,Flutter plugins~ Y * ~ b repo中没有运用这种机制的插件。

假如我{ S Z W * U 3的运用程序运用OpenGL为Flutter运用程序中的内联组成供给纹路,这是否适用于Metal后端?

对。如前所述,只要供给给Flutter的纹路能u | l X U够与Metal互? = f # z 8 g u操作,就能够持续O n t X 1 T ] D运用OpenGL更新纹路,Flutter将运用Metal组成相同的纹路。

怎么在运转时判别FlN A DutteT F x f (r运用程序是否运用Metal而不是OpenGL进行烘托?

fluttViewControllers视图将有一个camertalayer类。Flutter将运用Metal或OpenGL。也就是说,在一个过程中,不或许有一些Flutter运用实例一起运用Metal和OpenGL。

Flutter会在iOS模拟器上运用金属吗?

不,现在没有。Fl1 ; % ^ butter将一如既往地持续在iOS模拟器上运用软件后端。

发表评论

提供最优质的资源集合

立即查看 了解详情