Flutter开发之《网易新闻客户端Flutter混合开发实践》笔记(52)
摘自:网易新闻客户端Flutter混合开发实践
引言
网易新闻项目本身很庞大,业务繁多,全部改为Flutter实现肯定是不现实的,在使用Flutter的前期阶段,我们挑选了相对独立的几个模块,在现有工程的基础上对其进行Flutter改造,以循序渐进的改造方式保证项目稳健,下面以Android为例,从以下几个方面介绍下此混合开发实践过程:
Flutter集成方式
如上介绍说明,开发者可以使用Flutter开始一个全新的应用,也可以把Flutter作为应用的一个module,把这个module引入到现有的工程中,因此有如下图的两种接入方式:
网易新闻采用上图右所示的方式,以现有工程为主端的Flutter Module的方式集成到现有工程中去,具体集成方法可参考https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps,开发者在lib文件下使用Dart语言编写相应的业务代码。
混合栈及路由
以module的方式接入Flutter, 对于要改造的模块或者页面,在Activity或Fragment的onCreateView中创建FlutterView,Activity或者Fragment为FlutterView的一个容器;另Flutter的framework层提供的navigator管理控制Flutter内部的页面, 如下图中pageWidgetC1,C2,C3的都为Dart实现的flutter页面,而它们是处在同一个Activity中的,因此就有了混合栈的问题(原生栈和Flutter内部栈同时存在)。
对于混合栈路由的处理,如下图左所示,一个Activity里有多个Flutter页面,Flutter之间的跳转切换由Flutter内部栈管理,不过相应的对于页面跳转动画,手势右滑跟随退出等效果也要同原生端效果再实现一套,且需要同Android,iOS原生端现有的保持一致性,但Android,iOS两端现有的本来就是不一致的,因此就有了如下右图所示的第二个方案,一个Activitiy对应一个Flutter页面,路由由原生维护一套,Flutter页面之间的跳转其实是Native的跳转,比如Flutter page1跳转Flutter Page2,需要page1通过约定的消息协议通知到Native,Native收到跳转Flutter页面的协议后会再开启一个承载FlutterView的Activity来绘制Flutter page2页面,但该方案对于跳转层级比较深的页面,多个FlutterView实例对于性能有一定的损耗,因为每个flutterView的底层对应一个engine, 且页面比较隔离,对于数据同步问题要通过native获取,当然对于第一个方案混合路由来说,在原生页面和Flutter页面交替出现的场景下,也同样会存在这些问题。
这两种方案都是可选的,但都不是最优方案,Flutter设计的初衷应该是多以新的纯的Flutter工程为出发点来支持跨平台开发的,对于在现有工程改造的混合开发没有很好的支持,具体采用哪种方案,根据自己项目情况来定,或者更改Flutter的engine来优化内存和数据同步等问题。
网易新闻因为前期选取的改造模块比较独立,一个模块对应一个Activtiy, 该Activtiy里有多个Flutter页面,对于跳转动画,手势右滑跟随退出等效果同Android原生端效果一致,且在统一路由跳转处增加配置项,可切换一对一方案,这样可以保证iOS的接入与原生的交互体验一致性,后续随着越来越多的业务模块改造,对于现有设计方案,我们会不断更新调整优化。
稳定性保证
对于稳定性保证采用如下方案:
选取个别渠道上进行灰度测试;
动态接口开关控制用户逐渐放量测试;
通过FlutterError.onError和runZoned捕获异常,异常错误信息用channel机制通过native上报到崩溃收集系统(fabric-Crashlytics)。
上线情况:网易新闻Flutter用户量由4%逐渐放量到目前10%, 在几个版本的迭代过程中,异常收集达到万分之一,已达到生产标准。
Flutter开发之《网易新闻客户端Flutter混合开发实践》笔记(52)相关推荐
- 视频教程-Flutter布局实战网易新闻客户端-flutter
Flutter布局实战网易新闻客户端 Flutter书籍作者.曾任职于多家互联网大型企业,担任移动端项目技术负责人,主导研发和攻关技术难题,项目涉及教育.金融.医疗.交通.车载设备.智能家居等众多领域 ...
- IOS开发——仿网易新闻客户端
IOS开发--仿网易新闻客户端 本文没有内容,传个资源 衔接地址:http://download.csdn.net/detail/u012881779/7152281 左侧导航部分: 新闻版块 订阅版 ...
- 网易新闻客户端Flutter混合开发实践
转载:http://dy.163.com/v2/article/detail/EA0O4PQ705376OPS.html Flutter简单介绍 Flutter是Google打造的UI工具包,帮助开发 ...
- android 网易新闻 详情页面实现,Android实现网易新闻客户端首页效果
关于实现网易新闻客户端的界面,以前写过很多博客,请参考: 今天用ViewPager + FragmentAdapter + ViewPagerIndicator来实现. ViewPagerIndica ...
- 模仿网易新闻客户端(RSS版)(二)
一.摘要 继上一篇博客<模仿网易新闻客户端(一)>之后,笔者继续开发我们自己的"网易新闻客户端",由于找不到现成的url新闻链接地址,所以这里就用RSS订阅所提供的ur ...
- Android高仿网易新闻客户端之首页
关于实现网易新闻客户端的界面,以前写过很多博客,请参考: Android实现网易新闻客户端效果 Android实现网易新闻客户端侧滑菜单(一) Android实现网易新闻客户端侧滑菜单(二) 今天用V ...
- android 高仿网易新闻,Android高仿网易新闻客户端
关于实现网易新闻客户端的界面,以前写过很多博客,请参考: 今天用ViewPager + FragmentAdapter + ViewPagerIndicator来实现. ViewPagerIndica ...
- android 网易新闻 登录界面,Android实现网易新闻客户端首页效果
关于实现网易新闻客户端的界面,以前写过很多博客,请参考: 今天用ViewPager + FragmentAdapter + ViewPagerIndicator来实现. ViewPagerIndica ...
- Android Studio精彩案例(四)《DrawerLayout使用详解仿网易新闻客户端侧边栏 》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了提高兴趣,咱们开头先看看最终要实现什么样的效果: 侧拉菜单在Android应用中非常常见,它的实现方式太多了,今天我们就说说使用G ...
最新文章
- python SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: trunca
- OpenNI框架介绍
- 输出nginx执行过程中函数调用关系
- java.nio.file.NoSuchFileException
- 批量操作WinRAR实用技巧七招
- 图解linux下top命令的使用
- NOIP2009 最优贸易
- 回测引擎代码分析流程图
- 《ETL原理及应用》学习笔记 ·004【kettle的使用-2】
- jquery事件绑定与事件委托
- 在Objective-C中浅谈面向对象
- 军哥lnmp一键安装包详解
- java 实现电子签名_java swing实现手写板电子签名系统
- 京东天猫茅台抢购代码的一些总结
- win10重置网络命令_重置网络:Win10重置网络的技巧
- 第三阶段应用层——1.2 数码相册—字符编码
- n个人围成一圈,顺序编号。从第一个人开始从1到m报数,凡报到m的人退出圈子,编程求解最后留下的人的初始编号。
- 远程公司内网服务器【内网穿透】
- Eclipse SWT 创建项目(一)
- vue之使用vue-cli搭建SPA项目
热门文章
- Adaptive Execution让Spark SQL更高效更好用
- ubuntu server 改变系统语言支持中文
- Oracle 用数据泵导入导出数据
- [转]C++基础:C++的结构struct
- sysbench 性能测试
- 如何在cnblogs中插入LaTeX数学公式
- 【知识强化】第二章 进程管理 2.1 进程与线程
- AI 实验--v_JULY_v
- HTML Meta中添加X-UA-Compatible和IE=Edge,chrome=1有什么作用?
- hdu 2459 (后缀数组+RMQ)