(两百五十二)初探Flutter 加载流程

1.主页面

flutter都是以dart语言编写的,除了之前插入启动页和闪屏页的时候涉及了Android 下的manifest编写,其他的都没怎么涉及,那加载的页面对应于Android是什么呢?

        mCurrentUserId=0
        Current looper: Looper (android.ui, tid=1671)
      mCurrentUserId=0
  mCurrentFocus=Window{9792f01 u0 com.example.flutterlayouttest/com.example.flutterlayouttest.MainActivity}
    mCurrent=[0,96][1080,2340]
        Current looper: Looper (android.ui, tid=1671)
    mCurrentAppOrientation=SCREEN_ORIENTATION_UNSPECIFIED
      mCurrentRotation=ROTATION_0

以之前的学习的demo为例,加载的其实是MainActivity

这其实和Android下的manifest是对应的,可以看到manifest下面声明了一个名为MainActivity的activity。

自动生成的MainActivity是用kotlin写的。。。要学的东西真多。。。

package com.example.flutterlayouttest

import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterActivity() {
    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);
    }
}

看样子是继承了FlutterActivity并且重写了一个配置flutter engine的方法

flutter是开源的,点击看下MainActivity继承的FlutterActivity瞄一眼

这里应该就是中规中矩的Android代码了,继承了android.app.Activity并实现了一些方法

瞄一眼构造函数

    protected void onCreate(@Nullable Bundle savedInstanceState) {
        this.switchLaunchThemeForNormalTheme();
        super.onCreate(savedInstanceState);
        this.lifecycle.handleLifecycleEvent(Event.ON_CREATE);
        this.delegate = new FlutterActivityAndFragmentDelegate(this);
        this.delegate.onAttach(this);
        this.delegate.onActivityCreated(savedInstanceState);
        this.configureWindowForTransparency();
        this.setContentView(this.createFlutterView());
        this.configureStatusBarForFullscreenFlutterExperience();
    }

初始化了主题、使用了lifecycle、设置了代理、透明度、设置了布局以及为全屏配置了statusBar

具体细节后面再慢慢撸代码。。。

 

2.架构图

学习https://flutter.cn/docs/resources/faq#what-kinds-of-apps-can-i-build-with-flutter

中有个章节是

Flutter 是使用什么技术构建的?

Flutter 使用 C、C++、Dart 和 Skia (2D 渲染引擎) 构建。您可以参阅下面这张 架构图

下载了架构图如下

这里表示flutter有两层,由dart写的framework层和C++写的engine,刚看的源码中有涉及engine

 

这里写了graphics流程

 

渲染流程,有点类似于measure layout draw...

 

StatelessWidget是无状态的UI,是不可变的,只能根据不同的BuildContexts构造一个个UI

而StatefulWidget是有状态的UI,有一个state的类对应于不同的BuildContext

 

写了下StatefulWidget状态改变触发的流程

 

3.后续学习方向

学习下https://flutter.cn/docs/resources/faq#what-kinds-of-apps-can-i-build-with-flutter 的技术篇

简单学习下FlutterActivity的源码

简单了解下kotlin

 

相关推荐
©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页