显卡 GPU
- GPU就是图像处理芯片,GPU是显卡的核心,
- 显卡是由GPU、显存、电路板,还有BIOS固件组成的
- GPU因并行计算任务较重,所以功耗较大,只能焊接在显卡的电路板上使用
- 集成显卡,一般GPU就和CPU集成在一起,这时候它和CPU共用一个风扇和缓存
- GPU开发厂家只有2个,一个是AMD(ATI),一个是NVIDIA英伟达
图是如何显示的
- 我们看到计算机的画面都是图像
- fps 每秒多少个画面
- 刷新率,显示器的频率iphone 60hz 每秒刷新60次
- GPU绘制图像,放到buffer缓存
- 屏幕刷新取得缓存图片
- 理想是帧率和刷新率一样,每次绘制一帧,显示一帧
- 帧率绘制图像是,是从上向下覆盖,如果帧率快于刷新率,又可能下一图像是上下各一半显示
- 如果没有锁,容易出现问题 ,锁是消耗性能的
- 解决问题,就是双层缓存(back buffer、frame buffer) Vsync 垂直同步信号
- GPU写数据到back buffer,屏幕是取 frame buffer
- Vsync 负责调度从back buffer到 frame buffer的复制操作
- 复制完图像之后,通知GPU去绘制下一个画面
- 双层缓存缺陷-当GPU绘制图像时间过长,会产生jank,产生空白
- 三重缓存 减少 双层缓存缺陷
跨平台演变
- webview/UIwebview 嵌入网页
- react-native
- flutter
flutter vs RN
- flutter 速度比RN快很多
- flutter需要一门新语言dart
- RN是使用jsvm 调用原生接口
Native -> RN -> Flutter
- 原生 java代码 -> 安卓框架 -> Skia (绘图性能)-> CPU&GPU
- RN RN代码 -> 安卓框架 -> Skia -> CPU&GPU
- Flutter Flutter(DART) -> Skia -> CPU&GPU
- 以ios开发 oc语言为例,react-native 要 js代码 -> js bridge -> oc bridge -> oc module 几个过程,性能不如flutter
flutter 绘图原理
- GPU同步信号到UI线程
- UI线程用Dart构建图层树
- 在GPU线程进行合成
- 合成之后交给Skia
- Skia渲染后交给GPU绘制
渲染引擎 skia
是flutter向GPU提供数据的途径,c++写的 2d的图形库,skia公司开发,后来被谷歌收购 ,flutter 安卓 sdk默认支持,对于IOS需要引入,所以打包体积把安卓大
dart
dart语法和js差不多,很简单
APK
Android应用程序包(英语:Android application package,APK)是Android操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件。一个Android应用程序的代码想要在Android设备上运行,必须先进行编译,然后被打包成为一个被Android系统所能识别的文件才可以被运行,而这种能被Android系统识别并运行的文件格式便是“APK”。 一个APK文件内包含被编译的代码文件(.dex 文件),文件资源(resources), assets,证书(certificates),和清单文件(manifest file)
flutter 常用命令
flutter --version
flutter --help
flutter doctor
显示安装工具的信息flutter upgrade
升级你的flutter副本flutter create
创建一个新的项目flutter run
在设备上运行你的flutter程序flutter build
构建命令flutter install
在附加设备安装flutter应用程序flutter clean
删除构建项目flutter devices
列出所以连接设备flutter analyze
分析dart代码flutter logs
运行的日志信息fluter packages
管理flutter包flutter channel
列表或者开关flutter通道
Note
- Android 4.4及其以上版本Google 采用了 Chromium(http://www.chromium.org/) 作为系统WebView的底层内核,而不是WebKit
- 安卓模拟器 推荐夜神模拟器,而不用官方自带
- 调试
flutter run之后
R键 是热加载
P键 显示布局网格
O键 切换 ios和android显示样式 - ios默认项目目录没有权限,要
chmod -R 777 *