- 博客(21)
- 收藏
- 关注
原创 Flutter状态栏修改
当接收到vsync信号开始绘制时会执行compositeFrame方法根据状态栏的坐标去找找对应的layer上是否存在自定义的AnnotatedRegion并取出它们的的SystemUiOverlayStyle数据传递给native去更新状态栏.在flutter应用中导航状态栏的字体颜色和背景是由原生实现的,flutter提供了channel的桥接方法和AnnotatedRegion组件来实现, 推荐使用AnnotatedRegion,这也更加符合flutter的代码风格。主要实现都在这个方法里。
2023-05-11 18:23:22
899
原创 Dart FFi
FFI: 全称Foregin Function Interface,外部函数接口,是dart sdk的一个新的语言特性,提供了一套动态库加载器,能直接查找内存中已有的函数符号,也支持将指定路径的库加加载到内存中.通在dart侧持有这个库的文件句柄,利用dart暴露的方法查找对应的native方法返回给dart调用,从而提交与native通信的效率,相比较JNI和iOS的混编,它为开发者提供了一套额外的技术方案.实例代码可以参考 https://dart.dev/guides/libraries/c-inte
2022-06-20 23:47:51
868
原创 Android NDK/JNI初探
NDK, native sdk, 通过JNI访问,JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,通过它可以扩展很多系统底层的能力,如,,,以及通过将隐私代码如加密算法打包,并进行混淆,大大增加了破解难度,提供程序的安全性.cpp文件示例在android d
2022-06-15 23:08:40
332
原创 RunLoop实现原理
source: https://opensource.apple.com/source/CF/CF-855.17/CFRunLoop.cRunloop循环是线程基础的一部分,它维持了一个事件处理循环,用于计划工作和协调传入的事件,它的目标就是为了让线程有序高效的运行,在有工作的时候要保持忙碌状态,没有工作的时候让线程保持休眠状态。每个线程(包括应用程序的主线程)都有一个关联的运行循环对象,在App启动的时候,系统会默认的创建一个主线程的循环,用于处理主线程的任务,以及接收用户事件。子线程则需要显式地运行其运
2022-06-15 01:50:23
491
原创 Objective-C Runtime(二)创建对象
分配对象地址,init是用来清除地址上的数据,使其初始化objc源码地址:https://opensource.apple.com/tarballs/objc4/&person1代表的是当前指针的地址, 而person1则表示指针对象的地址,根据日志很容易得出指针变量: 存储在栈区, 高 -》 低 排列对象地址: 存储在堆区, 由低到高Alloc具体实现根据有如下几种方式创建类,最终调用了都指向了同一个方法alloc执行顺序NSObject创建objc_alloccal
2022-06-15 01:30:24
264
原创 Objective-C Runtime2.0(-)简介
相关资料引用https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008048-CH1-SW1https://developer.apple.com/videos/play/wwdc2020/10163/Objective-C一门动态语言, 它能在编译的时候转换为对应
2022-06-15 01:24:42
597
原创 iOS App启动原理
在工程中可以看到函数是程序的入口,其实在启动之前系统做了很多的工作,比如fork子进程,调用exec函数等,app的启动离不开系统内核的支持,所以在这之前需要对iOS系统架构有个基本了解Mac系统是基于内核的图形化操作系统,和系统架构层只有最上面的应用层框架部分有区别,使用的是框架, 而是框架,其余层的架构都是一样的应用层应用层基础框架核心框架层Drawin框架层应用层: 手机上的图形应用,如,等应用层框架: Cocoa框架,包括 Foundation,ApplicationKit,UIKit等,从功
2022-06-15 01:18:25
682
原创 项目常见设计模式
项目常见设计模式MVC#mermaid-svg-oWnhWDMDMlY2FQOP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-oWnhWDMDMlY2FQOP .error-icon{fill:#552222;}#mermaid-svg-oWnhWDMDMlY2FQOP .error-text{fill:#552222;stroke:#552222;}#mermai
2022-05-28 11:50:23
842
原创 记录一个Flutter空安全升级问题
最近碰到一个奇怪的问题先来看个现象工程结构.├── README.md├── android├── build├── ios├── lib├── pubspec.lock├── pubspec.yaml├── subpackage├── test└── webview_demo.iml子工程空安全检测正确✅jiodg45@jiodg45s-MacBook-Pro subpackage % dart pub outdated --mode=null-safetyShowing
2022-01-07 00:11:17
2717
翻译 Flutter-Engine-architecture
The-Engine-architecture(译)原文: https://github.com/flutter/flutter/wiki/The-Engine-architectureFlutter 结合了一个 Dart 框架和一个高性能的引擎。Flutter 引擎是一个用于运行高品质移动应用的可移植运行时。它实现了 Flutter 的核心库,动画和图形,文件和网络的 I/O,支持可访问性(accessibility),插件架构,以及用于开发,编译和运行 Flutter 应用程序的 Dart 运行
2021-09-14 20:34:53
234
原创 fluro路由框架实现
fluro├── fluro.dart└── src ├── common.dart //base components ├── extensions.dart //share route arguments via the context ├── fluro_router.dart //define route find route and create PageRoute └── tree.dart //m
2021-09-12 20:08:14
136
原创 Dart Sdk Tips
Dart Sdk包含了dart相关的基础command tools和dart相关的基础库Overview...├── pkg //dart工具包├── runtime //dart运行时相├── sdk //dart sdk,基础工具包以及各平台的实现 ├── tools└── utils├── _http ... //dart http请求库,基于dart其它基础库编写(io/isolate/match等)├── _internal ... //不同平台(移动端
2021-09-12 10:51:42
411
原创 WebKit渲染过程
WebKit笔记WebKit 是一个开源的浏览器引擎,浏览器渲染的过程就是根据描述或定义构建数据模型,通过模型生成图像的过程, 浏览器的渲染引擎就是将HTML/CSS/JavaScript文本及其相应的资源文件转换成图像结果的模块。主流的渲染引擎WebKit(对应的平台Safari,Chromium/Chrome,Android浏览器,ChromeOS,webOS)渲染引擎提供的主要功能包括:HTML解释器,将文本解析未DOM树,若解析到Javascript的node结点,则提交个javaScr
2021-08-30 23:01:13
280
原创 DarVM简介
DarVM笔记原文: https://mrale.ph/dartvm/Dart VM用于本机执行Dart代码的组件集合,可以把它比如成一个虚拟机, 主要包括以下内容:运行时系统对象模型垃圾回收编译的快照文件核心库本机方法辅助开发组件Debugging 断点调试Profiling 性能评测Hot-reload 热重载两种不同的编译模式的pipieJust-in-Time (JIT) 用于开发阶段翻译dart代码并执行Ahead-of-Time (AOT) 用于relea
2021-04-11 11:52:35
298
原创 Dart&Flutter编码规范指北
Dart & Flutter编码规范指南Dart编码规范英文版:[effective-dart en]https://dart.dev/guides/language/effective-dart中文版:[effective-dart zh]https://www.dartcn.com/guides/language/effective-dart/Flutter编码规范英文版:offical-style-guide en中文版,没有找到,我用蹩脚的英语翻译了一遍,内容如下, 还请各
2021-03-26 22:59:42
2642
原创 FFmpeg笔记(五)
FFmpeg-文件夹信息读取(avio_list_dir)文件夹读取分为3个大的步骤:创建文件读取的上下文对象 URLContext,用来保存记录文件读取过程中所有环境变量和源数据typedef struct URLContext { const AVClass *av_class; //用来提供上下文日志信息的打印,以及提供AVOptions const struct URLProtocol *prot; //文件协议对象,遵守文件的基本协议如`open/close
2021-03-22 22:47:04
463
原创 FFmpeg笔记(四)
FFmpeg编解码流程下面是一个文件格式的基本转换流程,a.libavformat.a提供demuxer和muxer,它是音视频文件容器的拆包解包工厂,encoded data packets对应的是AVPacket(音视频数据包).b. libavcodec.a提供decoder和encoder,对上游传递过的来的AVPacket进行编解码,的到AVFrame(视频帧,或音频帧,多个音频帧),音视频的压缩和特效实现就是针对AVFrame进行处理的。c. 处理后的音视频帧可以再次封装成文件,或是
2021-03-20 20:44:13
690
3
原创 FFmpeg笔记(三)
视频编码格式-H.264H.261是1990年ITU-T定制的一个视频编码标准,属于视频编解码器,视频编码器的鼻祖H.261又称为P*64,其目是为了能在64kbps的带宽上传输质量可接受的视频信号,编码程序设计的码率是能够在40kbps到2Mbps之间工作对CIF和QCIF分辨率的视频进行编解码(即亮度分辨率分别是352x288和176x144,色度采用4:2:0采样,分辨率分别是176x144和88x72), 它们是一种国际化的标准图像格式,不同硬件之间共同约定的统一格式H.261的实现原理
2021-03-20 00:27:33
309
1
原创 FFmpeg笔记(二)
集成FFmpeg主要分为量大块,按需将相关的库导入到工程中,补充缺失的头文件编译FFmpeg以iOS为例需要指定平台,Xcode信息,root sdk路径,编译工具链,支持的arch,输出路径,等参数.这里推荐一份完成的脚本,如果自己编译碰到问题可以参考这个脚本FFmpeg-iOS-build-script执行./build-ffmpeg.sh,会自动抓去依赖yasm:1.2.0,FFmpeg 4.3.1,gas-preprocessor.pl然后编译生成FFmpeg-iOS文件夹,内容如下:├
2021-03-15 20:42:32
423
原创 FFmpeg简介(一)
FFmpeg简介ffmpeg是一个非常快的视频/音频转换器,其也可以现场抓取音频/视频源,并在任意采样率、尺寸之间调整视频,以及提供多种高品质的滤镜系统。FFmpeg涉及的基本概念分辨率: 分辨率可以分为显示分辨率与图像分辨率.显示分辨率是指屏幕显示器的分辨率,是屏幕的像素(每一个像素 pixel是由多个颜色单元subPixel组成)密度决定的在单位英寸内像素越多,硬件所能控制的颜色点位越多,屏幕的显示的画面就会越精细。在手机参数一栏都会标有屏幕分辨率是多少。目前手机上常见的分辨率有720p,
2021-03-14 14:57:15
1417
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人