自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (1)
  • 问答 (5)
  • 收藏
  • 关注

原创 Kotlin协程学习随笔-打印协程名称

协程学习中使用协程相关日志是学习协程的重要手段,例如打印协程名。本文主要介绍了几种协程日志的打印方法。

2022-09-10 18:34:57 1271

原创 Kotlin进阶系列-带接收者的函数类型及函数字面值

上篇文章介绍了函数类型及函数字面值,本文将在此基础上进行拓展,主要介绍带接收者类型的函数类型及函数字面值。

2022-07-09 11:25:16 546

原创 Kotlin进阶系列-函数类型及函数字面值

本文详细介绍了Kotlin的函数类型及函数字面值的示例及语法。

2022-07-05 22:20:49 1064

原创 Kotlin进阶系列-Object关键字

本文介绍了object关键字在对象表达式,伴生对象,对象声明中的使用,并介绍了这几种使用场景的使用方法和技术要点。其中,对象表达式用于生成匿名类对象,伴生对象用于替代其他语言中的静态对象或者方法,对象声明用于更简单的实现单例模式。...

2022-06-18 13:31:30 5714

原创 Compose基础-SideEffect(二)

1. 前言在Compose基础-Side-effect(一)中,我们学习了几个常用的Side-effect:LaunchedEffect和rememberCoroutineScope,以及关键字rememberUpdateState的用法。在本篇文章中,我们将介绍剩下几个常用的Side-effect相关关键字的用法。2. DisposableEffect对于有些Side-effect,在其key值变化或者composable函数离开Composition时,需要对一些资源等进行清理。这种情况下,可以使

2021-12-28 19:30:20 963

原创 Compose基础--Side-effect(一)

1.前言学习Compose,Side-effect是其中必然要了解的重点和难点。正常情况下,composable函数不应该包含Side-effect(副作用),但是当composable函数需要修改app的状态时,这个composable函数需要从一个受控制的环境中被调用,此环境需要感知到本composable函数的生命周期,此时就需要使用Side-effect。谷歌推荐使用其提供的Effect APIs,这样这些Side-effect能以可预料的方式执行。本篇文章将简单介绍Compose中的几个常用Si

2021-10-08 15:18:26 1096

原创 Flutter框架分析 --EventChannel

1.  前言在文章Flutter框架分析(八)-Platform Channel中,我们分析了EventChannel的原理和结构,并详细讲解了与其相关的一些核心类,例如StreamHandler和MethodCodec等,本文主要讲解使用EventChannel的示例。2.  使用流程EventChannel一般用于事件流的传递,用于将Platform的点击等一系列事件等传递至Platform,仅支持native到Flutter的单向传递,接下来将分析其使用流

2021-08-11 15:22:13 876

原创 Flutter框架分析-MethodChannel

1. 前言在文章Flutter框架分析(八)-Platform Channel中,我们分析了MethodChannel的原理和结构,并详细讲解了与其相关的一些核心类,例如MethodCallHandler和MethodCodec等,本文主要讲解使用MethodChannel的示例。2. 使用流程MethodChannel可用于Flutter调用native的方法,也可用于native调用Flutter的方法,所以接下来将分别分析这两种使用流程。2.1  Flutter调

2021-08-10 19:39:53 326

原创 Flutter框架分析-BasicMessageChannel

1. 前言在文章Flutter框架分析(八)-Platform Channel中,我们分析了BasicMessageChannel的原理和结构,并详细讲解了与其相关的一些核心类,例如MessageHandler和MessageCodec等,本文主要讲解使用BasicMessageChannel的示例。2. 使用流程BasicMessageChannel可用于Flutter给native发消息,也可用于native给Flutter发消息,所以接下来将分别分析这两种使用流程。2.1

2021-08-07 23:39:56 1221

原创 Flutter框架分析(八)-Platform Channel

1. 前言由于Flutter运行于其他平台之上,其不可避免的需要和宿主平台进行通信。那其Flutter和宿主平台是如何进行通信的呢?本文将详细介绍Flutter和宿主平台的通信方式,并从源码的角度剖析通信原理。2. 架构概述Flutter是通过Platform Channel同宿主平台进行通信的。其消息通道结构示意图如下:为了保证界面能够响应及时,消息的传递是异步的。Flutter定义了三种不同类型的Platform Channel,它们分别是:BasicMessageChann

2021-08-04 19:32:36 383 2

原创 Flutter框架分析(七)-relayoutBoundary

1. 前言在Flutter框架分析(四)-RenderObject一文中,我们简单介绍了RenderObject中一个重要成员变量:RelayoutBoundary。下面我们简单回顾下RelayoutBoundary的主要作用。当一个组件的大小被改变时,其parent的大小可能也会被影响,因此需要通知其父节点。如果这样迭代上去,需要通知整棵RenderObject Tree重新布局,必然会影响布局效率。因此,Flutter通过RelayoutBoundary将RenderObject Tree分段,如果

2021-07-05 17:26:14 566 2

原创 Flutter框架分析(六)-Constraint

1. 前言在Flutter框架分析(四)-RenderObject一文中,我们简单介绍了Flutter中RenderObject布局的核心规则,Constraint向下,Size向上,父节点设置本节点的位置。在本文中,我们会对这个规则进行详细解析。2. 布局原则解析RenderObject布局的核心规则的具体解读如下:一个Widget从它的父节点获取Constraint,并将其传递给子节点。该Widget对其子节点进行布局。最终,该节点告诉其父节点它的Size。Flutter Framewo

2021-06-29 20:24:45 282 2

原创 Flutter框架分析(五)-Widget,Element,RenderObject树

1. 前言在本系列文章的前面三篇文章中,已经分别介绍Flutter的三种核心元素:Widget,Element,和RenderObject。并介绍了它们之间的关系。在这篇文章中,将在前面文章的基础上,对Flutter中非常出名的概念“Widget,Element,RenderObject树”进行剖析,以此加深读者对Flutter Framework的理解。2. Widget,Element,RenderObject树的概念和作用学习Flutter的时候经常会遇到一个概念:Widget,Element,

2021-06-16 17:33:27 335 2

原创 Flutter框架分析(四)-RenderObject

1. 前言Flutter中,RenderObject的主要职责是布局和绘制。通过上篇文章介绍的Element Tree,Flutter Framework会生成一棵RenderObject Tree. 其主要功能如下:布局,从RenderBox开始,对RenderObject Tree从上至下进行布局。绘制,通过Canvas对象,RenderObject可以绘制自身以及其在RenderObject Tree中的子节点。点击测试,RenderObject从上至下传递点击事件,并通过其位置和behav

2021-06-10 20:32:55 599 3

原创 Flutter框架分析--InteritedWidget

1 前言在Flutter中,由于其激进式组合(Everything is Widget)的设计理念,多层Widget是很常见的,如何在不同层的Widget之间传递数据,是开发者经常遇到的问题。通常做法是将数据添加到下级Widget的构造函数中。但是如果传递数据的Widget层级相隔较远,那将数据一层层传下来将是个噩梦。因此,Flutter提供了一种在Widget树中自上而下传递数据的方式:InheritedWidget。本文将深入讲解InheritedWidget的原理,并举例说明InheritedWid

2021-06-03 19:39:45 305 2

原创 Flutter框架分析-- Parent Data

1. 前言有时候,RenderObject需要在其子节点中存储一些数据,比如用于布局的一些参数,或者和其他子节点之间的关系。为此,Flutter提供了ParentData,用于存储父节点的一些信息。每个RenderObject都有这个成员变量,该成员在setupParentData方法中初始化。子类如果需要ParentData的某个子类,需要重写该方法,并在该方法中对ParentData进行初始化。2. ParentData分类ParentData可以分为三大类:BoxParentData,Sliv

2021-05-23 18:16:24 478 1

原创 Flutter框架分析(三)-Element

1. 前言上一篇文章讲到,Widget是描述一个UI元素的配置数据,Element才真正代表屏幕显示元素,是某个位置的Widget生成的实例。本篇文章则主要介绍Element的主要功能。通过上篇文章介绍的Widget Tree,Flutter Framework会生成一系列Element,这些Element构成了Element Tree,其主要功能如下:维护这棵Element Tree,根据Widget Tree的变化来更新Element Tree,包括:节点的插入、更新、删除、移动等;将Widg

2021-05-02 12:09:22 407 2

原创 Flutter框架分析(二)-- Widget

1. 前言Widget是开发Flutter应用过程中,接触最多的概念。Flutter的理念是万物皆Widget(Everything is Widget),这是为了实现Flutter的一个设计理念:激进式组合(Aggressive composability)。Widget由一系列的小的Widget组合而成,而这些进行组合的Widget,本身是由更基础的Widget构成。例如,Padding也是一种Widget,而不是Widget中的一个属性。在Flutter中,Widget的定义是:描述一个UI元素的

2021-04-26 21:45:42 220

原创 Flutter框架分析(一)--架构总览

Flutter框架分析(一)--架构总览前言Flutter体系架构不同跨平台技术对比小结前言Flutter是Google打造的高性能、跨平台的UI框架。它可以给开发者提供简单、高效的方式来构建和部署跨平台、高性能移动应用;给用户提供漂亮、无平台区分的app体验。Flutter是如何做到这一点的呢?它的框架结构是怎么样的呢?接下来,我将写一系列的文章分析Flutter的框架层,结合源码分析Flutter框架所采用的各种黑科技。本文是这个系列文章的第一篇,主要介绍Flutter框架的总览。Flutter

2021-04-07 22:22:42 475

BiasVarianceTradeoff

详细讲解了Bias和Variance直接的关系,学习机器学习的不错资料

2016-01-13

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除