Gityuan

Keep on going never give up

[置顶]Android系统架构开篇

基于Android 6.0或更高版本的源码,专注于分享Android系统原理、架构分析的原创文章,这是Android系列文章的开篇。

[置顶]Flutter开篇

基于Flutter 1.5.4或更高版本的源码,专注于分享Flutter引擎、框架、虚拟机的架构与原理分析的原创文章。

深入理解Flutter的Platform Channel机制

基于Flutter 1.5,从源码视角来深入剖析flutter的channel,相关源码目录见文末附录 一、概述 Flutter 官方提供了一种 Platform Channel 的方案,用于 Dart 和平台之间相互通信。 核心原理: Flutter应用通过Platform Channel将传递的数据编码成消息的形式,跨线程发送到该应用所在的宿主(Android或iO...

深入理解Flutter的Isolate创建过程

基于Flutter 1.5,从源码视角来深入剖析flutter的isolate机制,相关源码目录见文末附录 一、概述 Root isolate负责UI渲染以及用户交互操作,需要及时响应,当存在耗时操作,则必须创建新的isolate,否则UI渲染会被阻塞。 创建isolate的方法便是Isolate.spawn(),本文将从源码角度来讲解该方法的核心工作机制。 1.1 Isola...

深入理解Flutter异步Future机制

基于Flutter 1.5,从源码视角来深入剖析flutter消息处理机制,相关源码目录见文末附录 一、概述 Flutter框架层采用dart语言,在Dart中随处可见的异步代码,有大量的库函数返回的是Futrue对象,dart本身是单线程执行模型,dart应用在其主isolate执行应用的main()方法时开始运行,当main()执行完成后,主isolate所在线程再逐个处理队...

深入理解Flutter消息机制

基于Flutter 1.5,从源码视角来深入剖析flutter消息处理机制,相关源码目录见文末附录 一、概述 在深入理解Flutter引擎启动 已经介绍了引擎启动阶段会创建AndroidShellHolder对象,在该过程会执行ThreadHost初始化,MessageLoop便是在这个阶段启动的。 1.1 消息流程图 MessageLoop启动流程图 该过程主要工作:...

深入理解Flutter动画原理

基于Flutter 1.5,从源码视角来深入剖析flutter动画原理,相关源码目录见文末附录 一、概述 动画效果对于系统的用户体验非常重要,好的动画能让用户感觉界面更加顺畅,提升用户体验。 1.1 动画类型 Flutter动画大的分类来说主要分为两大类: 补间动画:给定初值与终值,系统自动补齐中间帧的动画 物理动画:遵循物理学定律的动画,实现了弹簧、阻尼、重力三...

深入理解setState更新机制

基于Flutter 1.5的源码剖析, 分析flutter的StatefulWidget的UI更新机制,相关源码: widgets/framework.dart widgets/binding.dart scheduler/binding.dart lib/ui/window.dart flutter/runtime/runtime_controller.cc 一、概述 对于...

深入理解Flutter应用启动

基于Flutter 1.5,从源码视角来深入剖析flutter应用的启动流程,相关源码目录见文末附录 一、概述 上一篇文章深入理解Flutter引擎启动 已经介绍了FlutterApplication和FlutterActivity的onCreate()方法执行过程, 并触发Flutter引擎的启动,并最终执行到runApp(Widget app)方法,这才刚刚开始执行dart的...

深入理解Dart虚拟机启动

基于Flutter 1.5,从源码视角来深入剖析引擎启动中的Dart虚拟机启动流程,相关源码目录见文末附录 一、概述 1.1 Dart虚拟机概述 Dart虚拟机拥有自己的Isolate,完全由虚拟机自己管理的,Flutter引擎也无法直接访问。Dart的UI相关操作,是由Root Isolate通过Dart的C++调用,或者是发送消息通知的方式,将UI渲染相关的任务提交到UIRu...

深入理解Flutter引擎启动

基于Flutter 1.5,从源码视角来深入剖析flutter引擎的启动流程,相关源码目录见文末附录 一、概述 Flutter作为一款跨平台的框架,可以运行在Android、iOS等平台,Android为例讲解如何从Android应用启动流程中衔接到Flutter流程,以及Flutter引擎的启动流程。 熟悉Android的开发者,应该都了解应用的启动会会执行Applicati...

Flutter渲染机制—GPU线程

基于Flutter 1.5,从源码视角来深入剖析flutter渲染机制,相关源码目录见文末附录 一、概述 看Flutter的渲染绘制过程的核心过程包括在ui线程和gpu线程,上一篇文章Flutter渲染机制—UI线程已经详细介绍了UI线程的工作原理, 本文则介绍GPU线程的工作原理,这里需要注意的是,gpu线程是指运行着GPU Task Runner的名叫gpu的线程,其实依然是...

Flutter渲染机制—UI线程

基于Flutter 1.5,从源码视角来深入剖析flutter渲染机制,相关源码目录见文末附录 一、概述 Flutter是谷歌开源的移动UI框架,可以快速在Android和iOS上构建出高质量的原生用户界面,目前全世界越来越多的开发者加入到Flutter的队伍。 Flutter相比RN性能更好,由于Flutter自己实现了一套UI框架,丢弃了原生的UI框架,非常接近原生的体验。 ...

彻底理解安卓应用无响应机制

引言 不论从事安卓应用开发,还是安卓系统研发,应该都遇到应用无响应(ANR,Application Not Responding)问题,当应用程序一段时间无法及时响应,则会弹出ANR对话框,让用户选择继续等待,还是强制关闭。 绝大多数人对ANR的了解仅停留在主线程耗时或CPU繁忙会导致ANR。面试过无数的候选人,几乎没有人能真正从系统级去梳理清晰ANR的来龙去脉,比如有哪些路径会引发AN...

Android技术架构演进与未来

引言 众所周知,Android是谷歌开发的一款基于Linux的开源操作系统,每年迭代一次大版本升级。 小米、华为、OPPO、VIVO、三星等各大厂商对Android原生系统进行二次开发衍生出具有各家特色的系统(比如MIUI),为手机、电视、平板电脑、手表等数十亿设备提供平台支持,使得Android作为全球最受欢迎的移动操作系统。Android诞生至今已有10余年,这一路走来Android遇...

理解Android P内部API的限制调用机制

本文基于原生Android 9.0源码来解读hidden API的限制调用机制 libcore/ojluni/src/main/java/java/lang/Class.java art/runtime/native/java_lang_Class.cc art/runtime/hidden_api.h art/runtime/runtime.h 一、引言 每一次Androi...

global reference限制策略

基于Android 9.0源码来讲一讲global reference问题 art/runtime/jni_internal.cc art/runtime/indirect_reference_table.cc art/runtime/java_vm_ext.cc art/runtime/jni_env_ext.cc art/runtime/java_vm_ext.h art/ru...