优化重点项
将以下资源本地化,打包到项目中
- canvaskit.js和canvaskit.wasm
- KFOmCnqEu92Fr1Me5WZLCzYlKw.ttf
- css2?family=Noto_Sans+SC
ps:最初canvaskit资源上传到阿里云,采用国内镜像资源加载。这次为了保险起见,也放入到本地。
好处:只要服务器正常能访问,这些资源文件就能够正常加载成功,最大程度上规避页面加载异常的风险!
最终项目中添加一些配置文件,如下图:
select * from learn
文/ Nayuta,CFUG 社区
状态管理一直是 Flutter 开发中一个火热的话题。谈到状态管理框架,社区也有诸如有以 Get、Provider 为代表的多种方案,它们有各自的优缺点。 面对这么多的选择,你可能会想:「我需要使用状态管理么?哪种框架更适合我?」 本文将从作者的实际开发经验出发,分析状态管理解决的问题以及思路,希望能帮助你做出选择。
首先,为什么需要状态管理? 根据笔者的经验,这是因为 Flutter 基于 声明式 构建 UI , 使用状态管理的目的之一就是解决「声明式」开发带来的问题。
「声明式」开发是一种区别于传原生的方式,所以我们没有在原生开发中听到过状态管理,那如何理解「声明式」开发呢?
State 的生命周期,定义了 Widget 的加载到构建的全过程,可以利用其回调机制根据 Widget 的状态选择合适的时机做合适的事情。而 APP 的生命周期,则定义了 APP 从启动到退出的全过程。
如果想在对应的 APP 的生命周期事件中做相应的处理,比如 APP 从后台进入前台、从前台退到后台,或是在 UI 绘制完后做一些处理,则可以应用 WidgetsBindingObserver 类来实现。
WidgetsBindingObserver 中的回调方法
1 | // Accessibility 相关特性回调 |
要使用以上回调方法,只需通过给 WidgetsBindingObserver 单例对象设置监听器即可监听相关回调方法
1 | 查看版本: flutter --version |
例如-> git reset –hard 4cc385b4b84ac2f816d939a49ea1f328c4e0b48e
查看版本-> flutter doctor 或者 flutter –version
颠覆开发者开发方式的Flutter
Flutter的诞生是为了彻底改变应用程序开发方式:将Web的迭代开发模式与硬件加速图形渲染和像素级控制相结合,这些以前可是游戏的专利,而现在它被来进行应用开发。自从Flutter 1.0测试版发布以来,谷歌对其不断地进行优化,让Flutter的功能日趋完善,比如添加了新的框架功能和小部件、与底层平台进行更加深入的集成、提供了丰富的软件包库,并且在性能和工具上也做了许多的改进。
从1.0到3.0版本,Flutter被越来越多的开发者使用来构建应用程序。据谷歌最新用户研究报告显示:
实现“大一统”,一个Flutter,横跨iOS、Android、Web、Windows、macOS、Linux六大平台
Flutter 3.0为开发者提供了一种使用Dart编程语言为六大面向消费者的主流平台(iOS、Android、Web、Windows、macOS、Linux)目标编写应用程序的方法。基于Flutter 3,开发者能拥有从单个代码库为六个平台构建应用程序的体验,这将使其生产力大大提高。
不同于之前的版本,Flutter 3新增了对macOS和Linux应用程序的稳定支持。添加新平台的支持并不像我们想象中那么简单,其需要的不仅仅是渲染像素,还需要做很多其他的工作,比如新的输入和交互模型、编译和生成支持、可访问性和国际化以及特定于平台的集成等。Flutter不仅让用户能灵活地充分利用底层操作系统,同时能够根据需要共享尽可能多的UI。
具体来看,在macOS上,Flutter3可以通过通用二进制构建方式支持英特尔和Apple Silicon,允许应用打包在这两种架构上本机运行的可执行文件。同时,由于Dart对Apple Silicon的支持,编译速度也将更快。在Linux上,Canonical和谷歌合作提供了一个高度集成且在同类中最佳的开发选项。
Flutter 在目前跨平台方案中有更好的平台一致性以及更优的体验。但对于本身已有成熟的业务代码的项目来说,更多的是采用混合栈的方式,在不变更原有 App 业务的基础上,将 Flutter 能力扩展为子模块进行接入和开发。这样并不影响原有的业务和原生能力,又可以结合业务需求进行技术选择。
标准的Flutter App工程,包含标准的Dart层与Native平台层
Flutter组件工程,仅包含Dart层实现,Native平台层子工程为通过Flutter自动生成的隐藏工程
Flutter平台插件工程,包含Dart层与Native平台层的实现
Flutter纯Dart插件工程,仅包含Dart层的实现,往往定义一些公共Widget
这算是一个非常好的消息了,之前在实际应用开发中,因为模拟器缺少对 arm 的支持,基本上都使用真机进行开发与调试。
随着 Android 11预览版的发布
Android 11 系统映像能够在不影响整个系统的前提下,直接将 ARM 指令转换成 x86 指令。开发者无需搭建高负载的 ARM 环境即可执行 ARM 二进制文件并进行测试。
携程技术
携程Android 10适配踩坑指南
新版本适配一直是 Android 开发者的痛楚之一,但是这件事如果长期不升就会越来越困难。加上现在应用市场比较强势,所以保持一个较高的版本的适配是有必要的。
携程旅行分享了他们从API 26 到 29 的适配经验,大家可以参考一波。
全网最详!暗黑模式在 Trip.com App 的实践
暗黑模式也最近的一个非常热门的话题,甚至微信支持暗黑模式都成为热点了。如果你对这方面感兴趣,或者刚好有暗黑实践的需求,那么可以看这一篇由携程 UED 团队+研发团队撰写的文章。
我个人其实一直没有体验过暗黑模式,毕竟没适配的 app 太多了,所以我不认为把手机切换为暗黑模式有很好的的体验…
Google 开发者
在 Android 开发中使用协程 | 背景介绍
可以看一下官方的文章了解下协程的一些背景知识,用来解决什么问题,如何解决,以及性能相关的一些知识。
字节跳动技术团队
抖音包大小优化-资源优化
可以看下抖音团队为了减少 apk 的体积,针对资源这一方面做了哪些极致的事情。
另外 apk 体积优化也可以看下 jsonchao 的文章:
吹爆系列:深入探索Android包体积优化
百度 APP 技术
Gradle 与 Android 构建入门
写了一篇 Gradle 构建入门的文章,其实很多同学都非常害怕 Gradle,这篇文章会给大家解释为什么需要 Gradle,以及 Gradle 相关的一些基础知识,帮你更好的了解相关知识,比较轻松,可以一看。
西瓜技术团队
AwCookieManager.nativeGetCookie crash 排查
分享了西瓜的一个CookieManager.getCookie(String url) 过程中的 native crash,分析过程较为复杂,不过给出了解决方案,解决方案涉及到 hook,西瓜用了自研的方案,开源的 lancet 应该也能做到,这篇文章也会提到 lancet。
大家可以在 B 站看到所有的内容:
https://space.bilibili.com/64169458/channel/detail?cid=91608
有个值得关注的是,官方回复了一些 Android 开发的问题:
一些新技术都有涉及,比如 ViewPager2 正式发布,关于 Camerax,Camera2,Camera1 之间如何选择,以及Kotlin,Jetpack Compose 相关问题。
目前随着移动端的兴起,早期的很多中文 PC 博客已经很少有人去阅读了,也很难被大家所发现。
因为我之前关注一个小伙的创业实验,比较好奇他最终会不会成功,也好奇他的灵感,他的下一个产品是一个中文博客相关的 RSS 产品。
所以他收集了一波中文博客列表,推荐给大家:
https://github.com/timqian/chinese-independent-blogs
大概有 300 多位中文博客列表,偶尔读一些这上面的文章,应该还是能激发不少灵感的。
其实如果这些独立博客数量够多,可以聚合起来,做一个阅读 app,支持订阅也是不错的。