Notex

Categories · Development

主页

关于

归档

Jetpack ComposeKotlin

Jetpack Compose Side Effects

LaunchedEffect它会在第一次重组时运行,之后重组时不会再重新运行。但是,我们可以通过指定 key1 的方式来重新运行。它运行在一个协程上。但是想要它一直运行也可以,写个死循环呗(大雾)。 SideEffect它会在每次重组时运行。它不运行在协程上。 举个例子。我们来做一个计时器。 @Composable fun TryWithoutSideEffect() { var timer by remember { mutableStateOf(0) } Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { Tex..

Read more
AndroidAndroid FrameworkView

ViewRootImpl 解析

之前反复提到过的DecorView不是整个View树的根吗?怎么又出来一个看起来像是『根』的东西? 我们看看ViewRootImpl的代码,就能明白Android为什么要添加两个『根』在树上。

Read more
loading..
AndroidAndroid FrameworkView

View 的绘制流程

View的绘制流程View树的绘制流程当 Activity 接收到焦点的时候,它会被请求绘制布局。该请求由 Android Framework 处理。绘制是从根节点开始,对布局树进行 measure 和 draw。整个 View 树的绘图流程在 ViewRoot 类的performTraversals()函数展开,该函数所做的工作可简单概况为是否需要重新计算视图大小(measure)、是否需要重新安置视图的位置(layout)、以及是否需要重绘(draw),流程图如下:

Read more
loading..
Android插件化设计模式

关于插件化

插件化几乎是现在 Android 开发工程师的必备技能之一了。在前几年,Android 的安全机制不是很完善的时候,插件化的确大放异彩了一段时间,但是随着 Android 变得越来越安全,插件化的风头也有所收敛。从最初只支持 Activity 的动态加载发展到可以完全模拟 app 运行时的沙箱系统,插件化的技术也一步步趋于成熟。

Read more
loading..
Android设计模式组件化

关于组件化

随着APP版本不断的迭代,新功能的不断增加,业务也会变的越来越复杂,APP业务模块的数量有可能还会继续增加,而且每个模块的代码也变的越来越多,这样发展下去单一工程下的APP架构势必会影响开发效率,增加项目的维护成本,每个工程师都要熟悉如此之多的代码,将很难进行多人协作开发,而且Android项目在编译代码的时候电脑会非常卡,又因为单一工程下代码耦合严重,每修改一处代码后都要重新编译打包测试,导致非常耗时,最重要的是这样的代码想要做单元测试根本无从下手,所以必须要有更灵活的架构代替过去单一的工程架构。

Read more
Flutter

Flutter 的 Isolate 与事件循环机制

在 Dart 中,没有『多线程』的概念,在绝大多数的开发中,只会用到 UI 线程,也就是 Android 中所谓的『主线程』。 但是 Dart 给我们提供了异步编程的方式,来让我们『同步』地编写『异步』的代码。也即await/async关键字。在运行一些代码时,UI 线程还会继续渲染 Widget Tree,不会卡死。 那么单线程的 Dart 是如何实现这种看起来像『多线程』的机制的呢?这里我们要先介绍一个概念:Isolate。

Read more
loading..
kotlincoroutine协程

Kotlin 协程

Kotlin 语言发展至今,也有9个年头了。当初发明之后一直不愠不火,直到近年 Google 宣布将支持使用 Kotlin 语言支持 Android 开发之后,Kotlin 才算是真正火起来。 在 Android 开发中,Kotlin 语言与 Java 语言可以无缝衔接,其实背后还是 Android 虚拟机的功劳,它会将 Kotlin 文件转换为 class 文件,然后加载到虚拟机中运行。在本文写作时,Kotlin 版本已经到了 1.3.72,1.4.0 正处于 preview 阶段。关于 Kotlin 语言的学习,我会单开一篇文章来讲,这篇文章我们来讲讲 Kotlin 中一个非常重要的特性——协程(Coroutine)。

Read more
123