5 milan-xiao-tiejiang

尚未进行身份认证

5年Android开发,熟练掌握Android、Java,深入研究过系统源码及多方主流框架。 Java方向技术全能,熟练掌握MySQL、Spring等Java Web技术。 热爱新技术,对JS、flutter有一定的认知。 北京、太原寻求工作。

等级
TA的排名 18w+

SystemServer源码分析

Zygote 进程通过 fork() 创建出 SystemServer,SystemServer进程继承了 Zygote 进程所有状态 private static Runnable forkSystemServer(String abiList, String socketName, ZygoteServer zygoteServer) {//... ...

2020-04-26 19:53:53

Zygote进程启动过程

Zygpte 进程的启动脚本Zygote 进程是在 init 进程启动时创建的,Zygote 的启动脚本在system/core/rootdir 目录下,这里不详细说 init 进程启动过程了,它可以简单描述为解析 init.rc ,启动相应的脚本init.zygote32.rc 代码#zygote配置文件相关init.rcservice zygote /system/bin/a...

2020-04-26 18:42:49

Flutter 调用原生系统日志库

这里以Flutter 调用原生系统日志库,来理解下 Flutter 与 Android 交互这里创建的时候用到了 Kotlin 、AndroidXAndroid端进入 android 目录下的 build.gradle ,点击 Open for Editing in Android Studio ,打开新的 android项目。App 目录下 build.gradle 引入...

2020-04-23 20:21:35

Flutter App 生命周期

WidgetsBindingObserver 这个类提供的回调函数非常丰富,常见的屏幕旋转、屏幕亮度、语言变化、内存警告都可以通过这个实现进行回调。直接看下源码abstract class WidgetsBindingObserver {//页面pop Future<bool> didPopRoute() => Future<bool>.value(f...

2020-04-23 19:28:39

Flutter 中 State 生命周期

创建State 初始化时会依次执行 :构造方法 -> initState -> didChangeDependencies -> build,随后完成页面渲染。构造方法是 State 生命周期的起点,Flutter 会通过调用 StatefulWidget.createState() 来创建一个 State。我们可以通过构造方法,来接收父 Widget 传递的初始化 UI...

2020-04-23 19:02:52

Flutter中RenderObject布局

RenderObject 是主要负责实现视图渲染的对象。每个 Element都对应一个RenderObject。Flutter 通过控件树(Widget 树)中的每个控件(Widget)创建不同类型的渲染对象,组成渲染对象树。而渲染对象树在 Flutter 的展示过程分为四个阶段,即布局、绘制、合成和渲染。 其中,布局和绘制在 RenderObject 中完成。abstract cla...

2020-04-21 15:04:59

Flutter中Widget与Element关系

WidgetWidget 是 Flutter 世界里对视图的一种结构化描述,你可以把它看作是前端中的“控件”或“组件”。Widget 是控件实现的基本逻辑单位,里面存储的是有关视图渲染的配置信息,包括布局、渲染属性、事件响应信息等。实际上,Flutter 种真正代表屏幕上显示元素的类时Element,Widget 只是描述 Element 的配置数据,并且一个Widget 可以对应多个El...

2020-04-21 11:40:10

Flutter基本认知

硬件绘图基本原理显示器是由一个个物理显示单元组成的,每一个单元称为一个物理像素点,而每一个像素点可以发出多种颜色,显示器的成像原理就是在不同的物理像素点上显示不同的颜色,最终构成完整的图像。显示器颜色是由RGB三基色组成的,我们常说的一个像素点可以显示1600万的颜色,即2的24次方,即每个基本色(R、G、B)深度扩展直8 bit(位),颜色深度越深,所以显示的颜色越丰富。为更新显示画...

2020-04-21 09:42:43

Kotlin 协程

launch - 创建协程 async - 创建带返回值的协程,返回的是 Deferred 类 withContext - 不创建新的协程,在指定协程上运行代码块 runBlocking - 不是 GlobalScope 的 API,可以独立使用,区别是 runBlocking 里面的 delay 会阻塞线程,而 launch 创建的不会...

2020-04-15 10:03:09

Kotlin中常用的设计模式整理

Kotlin 中设计模式有很多种写法,各有个的好处,这里不是统一工厂模式interface Computer { val cpu: String //增加Factory名字 companion object Factory { operator fun invoke(type: ComputerType): Computer { ...

2020-04-14 19:12:35

重学Kotlin——元编程

反射KClass和 Java 的 Class 可以看作同一含义,可以通过 .java 和 .kotlin 方法在 KClass 和 Class 之间转化。 ::class 表示获取 class 对象。KCallable和 Java 的 AccessiableObject 一致。Java中构造方法为独立的类型,而 Kotlin 统一作为 Function 处理。Kotlin 把 ...

2020-04-13 19:08:51

重学Kotlin——扩展函数

以 Toast 为例fun Context.toast(value: CharSequence) = toast { value }fun Fragment.toast(value: CharSequence) = toast { value }fun Context.toast(value: Int) = toastInt { value }fun Fragment.toast...

2020-04-13 17:42:05

重学Kotlin——内联函数

在Kotlin中,每声明一个 Lambda 表达式,就会在字节码中产生一个匿名类。该匿名类包含一个 invoke 方法,作为 Lambda 的调用方法,每次调用的时候,还会创建一个新的对象。Java 在SE 7之后通过invokedynamic 技术实现在运行期才产生相应的翻译代码,在invokedynamic 首次被调用的时候,就会产生一个匿名类来替换中间码invokedynamic ,后...

2020-04-13 17:02:07

重学Kotlin——集合高阶函数

map val list = listOf(1, 2, 3, 4) val map = list.map { it * 2 }源码:定义了 map 的扩展函数 mapTo ,mapTo 接受两个参数,第一个参数类型是集合,第二个参数为一个方法 (transform: (T) -> R) ,最终返回一个集合,mapTo中将transform...

2020-04-13 15:29:14

重学Kotlin——类型系统

Kotlin中可空类型常见的几种空判断?.安全的调用,当一个值存在时,才会执行它的下一步操作?:Elvis操作符,或者合并运算符!!.非空断言,用来保证某个变量不为空,除此之外还有 !is as? 等原理:Kotlin 在方法参数上标注@Nullable,在实现上,采用if..else来对可空情况进行判断,对比Java8的Optional,兼容性、性能更好,开销更...

2020-04-11 18:34:09

重学Kotlin——代数数据类型和模型匹配

代数数据类型 ADT组合类型。例如,一个类型由其他类型组合而成。常见的代数类型是 和(sum)类型、积(product)类型。ADT是类型安全的。积类型ADT中,积类型的表现形式与乘法非常相似,可以理解为一种组合。和类型比如枚举,和类型是类型安全的,因为它是一个闭环,如上节的Day枚举。也是一种OR关系,要么是SUN,要么是MON,不能同时拥有两种类型。可以利用密闭类对枚举...

2020-04-11 17:05:10

重学Kotlin——面向对象

类及接口kotlin中除非显示地声明延迟初始化,不然就需要指定属性的默认值。接口可以支持java8类似的默认实现,同时支持抽象属性。class Bird(age: Int) { val weight: Double = 500.0 init { //... } constructor(weight: Double) : this(0) ...

2020-04-11 15:36:22

重学Kotlin——基础语法

val和varvar代表了varible变量,val是varible+final,当然val引用不可变。两者都可以声明一个类的属性。尽可能的采用val、不可变对象及纯函数来设计程序。高阶函数以其他函数作为参数或返回值的函数可以理解为高阶函数。//定义国家类型data class Country( val name: String, val continient:...

2020-04-11 14:33:44

Android 瘦身

参考Awesome-Android-InterviewDemo:Advanced

2020-04-01 16:01:03

Android UI

参考Awesome-Android-InterviewDemo:Advanced

2020-04-01 16:00:33

查看更多

勋章 我的勋章
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。