- 博客(74)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 源码分析:onAttach, onMeasure, onLayout, onDraw 的顺序。
从前文《 源码解析:dialog, popupwindow, 和activity 的第一个view是怎么来的?》中知道了activity第一个view或者说根view或者说mDecorView 其实就是一个FrameLayout,以及是在系统handleResume的时候加入到系统windowManager中的,并由framework中的ViewRootImpl 接管,通过ViewRootIm
2014-06-16 23:49:27
20767
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 源码解析:dialog, popupwindow, 和activity 的第一个view是怎么来的?
问题在慢慢熟悉android 的过程中,发现一个view 或者layout的初始化,或者构造的流程还是比较清楚的,也就是加到父控件中,然后就开始了对应的生命周期。但是整个界面的父控件,或者说系统的第一个view, 是怎么来的,如何初始化和绘制的呢?概述概述:带着困扰我的问题,在前文的基础上,继续分析应用界面和framework的关系,通过分析viewrootimpl 的来源,并结合di
2014-06-15 11:48:15
7108
9
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 深入分析UI 上层事件处理核心机制 Choreographer
深入分析UI 上层事件处理核心机制 Choreographer 结论写在前面:Choreographer就是一个消息处理器,根据vsync 信号 来计算frame,而计算frame的方式就是处理三种回调,包括事件回调、动画回调、绘制回调。这三种事件在消息输入、加入动画、准备绘图layout 等动作时均会发给Choreographer。下面来看分析过程看过一些源码后,发现ui 绘制的
2014-01-22 00:13:46
31626
8
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android 动画animation 深入分析
Android 动画animation 深入分析前言:本文试图通过分析动画流程,来理解android动画系统的设计与实现,学习动画的基本原则,最终希望能够指导动画的设计。0 本文中用到的一些类图1 view animation 调用方法:view.startAnimation(animation); public void startAni
2014-01-15 16:49:11
25712
13
原创 问题解决-Library not loaded 错误解决
编译flutter engine 代码的准备工作时, 遇到一个python 运行的错误chanson.cc@MacBook-Pro-7dyld: Library not loaded: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation Referenced from: /Library/Frameworks/Python.framework/Versions/3.6/Resources/Pyth
2021-06-23 16:17:28
2625
翻译 译-Dart虚拟机入门(Introduction to DartVM)
原文地址:https://mrale.ph/dartvm/发现一篇2019年的译文:https://annatarhe.github.io/2019/01/31/introduction-to-dart-vm.html,部分中文专有名词摘自该译文备注: 原文仍在处在修改状态, 翻译此文时,原文最后修改时间为2020年1月29日本文的目标:本文的目标是作为DartVM 开发的参考手册, 供新团队成员、潜在的外部贡献者、或者其他任何对VM内部原理感兴趣的人。 本文从介绍DartVM 简...
2021-05-12 15:00:18
1029
转载 科学方法定义
Elon Musk 对于科学方法的定义, 摘自一篇采访 1. 问一个问题 2. 收集关于这个问题尽可能多的证据 3. 根据证据发展可能的公理,并尝试算算每一个公理是真理的可能性 4. 中肯地得出结论以决定:这些公理正确吗?他们与问题相关吗?他们是不是能严格退出这个结论?又有多大的概率成立? 5. 试图证伪这个结论。找一些别人对这个结论的批驳来进一步帮助你打破你的结论。 6. 如果没有人能
2017-11-22 11:12:17
664
1
原创 Kotlin学习之-6.4 Coroutines
Kotlin学习之-6.4 Coroutines 在Kotlin V1.1中Coroutines 还处在实验阶段有些接口会做一些耗时的操作例如网络IO请求,文件IO, CPU或者GUP密集的工作等,并且要求调用者阻塞知道操作完成。Coroutines提供了一种能够替换避免阻塞线程的方法并且代价更小、控制性更好的操作:suspension of a coroutineCoroutines通过把复
2017-07-21 09:24:31
2715
原创 Kotlin学习之-6.3 内联函数
Kotlin学习之-6.3 内联函数使用高阶函数会带来一些运行时的代价:每个函数都是一个对象,并且会捕获一个必报,例如,那些在函数体中访问的变量。会带来内存分配(对函数对象和类对象)和虚拟调用引入的额外开销但是大多数情况下这种类型的开销可以使用内联lambda表达式来消除。下面展示的函数就是这种情况下很好的例子。例如,lock()函数可以很容易的做成内联的。考虑如下用例:lock(l) { foo(
2017-07-14 09:49:29
470
原创 Kotlin学习之-6.2 高阶函数和lambda表达式
Kotlin学习之-6.2 高阶函数和lambda表达式高阶函数一个高阶函数是一个接受函数作为参数,或者返回一个函数。一个高阶函数的例子是lock()函数,它接受一个锁对象和一个函数,获取锁,运行函数,然后释放锁。fun <T> lock(lock: Lock, body: () -> T): T { lock.lock() try { return body()
2017-07-13 09:45:47
1497
原创 # Kotlin学习之-6.1 函数
函数和lambda表达式Kotlin学习之-6.1 函数函数定义Kotlin中函数使用关键字fun定义的fun double(x: Int) : Int { return 2*x}函数的使用调用函数使用传统的方式:val result = double(2)调用成员函数使用点操作符// 创建Sample类的实例并调用foo函数Sample().foo()内建注解函数调用也可以使用内建注解
2017-07-12 09:43:50
767
原创 Kotlin学习之-5.13 代理属性
Kotlin学习之-5.13 代理属性有一些常见的属性,尽管我们可以每次需要他们的时候手动实现他们,但是最好还是可以实现一次然后随处可用,并把它放到库里。 这些例子包括:懒加载属性:属性值会在第一次访问的时候被计算可观察的属性:监听器会得到属性变化的通知存储在map中的属性,而不是单独给每个属性一个单独的变量为了覆盖这些情况,Kotlin支持代理属性class Example { v
2017-07-11 20:14:22
834
原创 Kotlin学习之-5.12 代理模式
Kotlin学习之-5.12 代理类代理代理模式已经被证明是一种很好的替代实现继承的方式,并且Kotlin原生支持代理模式还不需要任何多余代码。一个类Derived可以从一个接口Base继承并且代理所有他的共有方法到一个特定的对象上。interface Base { fun print()}class BaseImpl(val x: Int) : Base { override f
2017-07-06 09:22:41
562
原创 CSDN会用用我的账号搞事情?
一大早起来,发现自己博客莫名奇怪的多了几篇博客。不知道是什么鬼,谁半夜用我的账号连续分享5篇奇怪的文章。应该不会是盗号的,因为CSDN 上也没有什么可以变现的东西,没有盗号的意义。但是这几篇文章还有模有样的。 可是谁半夜2点还分享文章啊。 CSDN 你这是要搞什么?有图为证:
2017-07-06 09:11:51
2289
1
原创 Kotlin学习之-5.11 对象表达式和声明
Kotlin学习之-5.11 对象表达式和声明有时候我们需要创建一个类的实例,并且扩展或者修改其中的一两个方法,但不想显式地声明一个子类。Java中是使用内部类来处理这种情况,Kotlin则使用对象表达式和对象声明扩展了这种概念。对象表达式创建一个内部类的对象,并且继承某些类型,我们这么写:window.addMouseListener(object: MouseAdapter() { ov
2017-07-05 14:53:44
699
原创 Kotlin学习之-5.10 枚举类
Kotlin学习之-5.10 枚举类使用枚举类最基本的方法是实现类型安全的枚举:enum class Direction { NORTH, SOUTH, WEST, EAST}每一个枚举常量都是一个对象。枚举常量使用逗号分隔开初始化由于每个枚举都是一个枚举类的实例,所以他们可以被初始化:enum class Color(val rgb: Int) { RED(0xFF0000),
2017-07-05 10:00:52
549
原创 Kotlin学习之-5.9 内部类
Kotlin学习之-5.9 内部类类可以嵌套在其他类中:class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 }}val demo = Outer.Nested().foo() // == 2内部类一个类可以被标记成inner来表示可以访问外部类的成员。内部类持有一个对外部类的
2017-07-05 09:19:47
472
原创 Kotlin学习之-5.8 泛型
Kotlin学习之-5.8 泛型和Java中一样,Kotlin 也可以使用类型参数:class Box<T>(t: T) { var value = t}一般情况下,要创建这样的类的实例,我们需要提供类型参数:val box: Box<Int> = Box<Int>(1)但是如果参数的类型可以推断出来,例如,从构造器的参数或者其他方法可以推断出类型,这种情况下可以神略类型参数:val bo
2017-07-04 15:45:52
828
原创 Kotlin学习之-5.7 封装类
Kotlin学习之-5.7 封装类封装类是用来表示严格的类层级,当一个值可以是一个类型集合中的任意一个,而不是其他类型时。他们的相当于是枚举类的扩展,对于每一个枚举类型的值得集合也是严格定义的,但是每一个枚举常量有且仅有一个单例,这样一个封装类的子类可以有多个包含状态的实例。要声明一个封装类,需要在类名前面用sealed描述符标识。一个封装类可以有子类,但是他们必须全部都和封装类定义在同一个文件里。
2017-06-30 09:43:40
888
原创 # Kotlin学习之-5.6 数据类
Kotlin学习之-5.6 数据类我们经常创建一个类只是用来持有数据,不做其他事情。在这样的类中,一些标准的功能是机械地从数据中衍生出来的。在Kotlin中,这样的类叫做数据类,用data标识:data class User(val name: String, val age: Int)编译器会在主构造器中,自动给定义的所有属性都派生如下的成员:equals/hashcode() toStrin
2017-06-29 10:11:44
593
原创 Kotlin学习之-5.5 扩展
Kotlin学习之-5.5 扩展Kotlin 与C# 和Gosu 类似,提供了无需必须继承类,或者使用装饰器模式来扩展类功能的能力。这是通过一种叫做扩展的extension特殊的声明来实现的。Kotlin支持扩展方法和扩展属性。扩展方法声明一个扩展方法,我们需要在它的名字前面加上一个接收类型前缀,例如,加上一个被扩展的类型。如下示例给MultableList<Int>添加了一个swap方法:fun
2017-06-28 20:28:26
667
原创 Kotlin学习之-5.4 可见性描述符
Kotlin学习之-5.4 可见性描述符类,对象,接口,构造函数,函数,属性以及他们的setter可以用可见性描述符来修改其可见性。getter方法的可见性通常和属性的可见性一致。Kotlin中有4中可见性描述符:private, protected, internal和public。如果没有显示写描述符,那么默认可见性是public 的。下面是各种不同定义范围的解释。包函数,属性和类,对象和接口可
2017-06-28 09:12:17
540
原创 Kotlin学习之-5.3 接口
Kotlin学习之-5.3 接口Kotlin中的接口和Java 8中的接口很接近。它们可以定义抽象函数,也可以实现。和抽象类的区别在于接口不能存储状态。接口可以拥有属性,但是这些属性必须是抽象的或者提供访问方法的实现。接口使用关键字interface 来定义interface MyInterface { fun bar() fun foo() { // 可选的函数主
2017-06-14 08:47:04
409
原创 Kotlin学习之-5.2 属性和成员
Kotlin学习之-5.2 属性和成员定义属性Kotlin中,类可以有属性。它们既可以用var关键字定义成变量,也可以用val关键字定义成只读量。class Address { var name: String = ... var street: String = ... var city: String = ... var state: String? = ...
2017-06-12 15:30:43
675
原创 Kotlin学习之-5.1 类和继承
Kotlin学习之-5.1 类和继承类Kotlin中类定义使用关键字classclass Invoice {}定义一个类需要包括类名,类头(包括它的类型参数,主构造函数等等)和类主体包含在成对的花括号。 类头和类主体是可选的, 如果类没有类主体,那么花括号也可以省略class Empty构造函数Kotlin中的类可以有一个主要的构造函数和多个次要构造函数。主要构造函数是类头的一部分,它直接跟在类名
2017-06-12 09:26:58
889
原创 Kotlin学习之-4.3.4 返回和中止循环
Kotlin学习之-4.3.4 返回和中止循环Kotlin 有3中结构化的跳转语句:return,默认是从最近的函数或者匿名函数中中返回。break,中止最近的循环continue,从当前的循环中继续执行下一次循环所有这些表达式都可以被用来组成更大的表达式val s = person.name ?: return基于标签的break 和continueKotlin中的任何表达式都可以被 标记
2017-06-09 15:09:42
4048
原创 Kotlin学习之-4.3.3 控制流
Kotlin学习之-4.3.3 控制流if 表达式Kotlin中,if 是一个表达式,他会返回一个值。 因此没有三元操作符(condition ? then : else), if表达式可以很好的表达这样的功能。// 普通用法var max = aif (a < b) max = b// 带else 的表达式var max: Intif (a > b) { max = a} els
2017-06-09 10:24:59
758
原创 Kotlin学习之-4.3.2 包管理
Kotlin学习之-4.3.2 包管理Kotlin源文件是以包定义开头的:package foo.barfun baz() {}class Goo() {}// ...所有源文件中的的内容包括类和函数都在定义的包中。所以在上面的例子中,函数baz()的全名是foo.bar.baz, 类Goo的全名是foo.bar.Goo。 如果包没有定义,那么源文件的内容将全部属于”默认”包下, 该”默认”
2017-06-08 20:07:54
775
原创 Kotlin学习之-4.3 基础类型
4.3 基础类型Kotlin中,所有都是对象是因为我们可以调用任何对象的成员函数和属性。有一些类型是内建的,因为这些类型的实现是优化过的,但是使用的时候看起来和普通类是一样的。本节中我们将介绍这些类型:数据类型,字符类型,布尔类型和数组。(number, character, boolean 和array)数据类型 numbersKotlin中处理数据类型和Java方法很类似,但也不完全一样。例如,
2017-06-07 17:54:29
901
原创 4.2 Kotlin 语法精简版(2)
4.2 Kotlin 语法精简版(2)创建数据对象(POJOs/POCOs)data class Customer(val name: String, val email: String)提供一个Customer类,有下列功能:getters 给所有的属性(setters 如果有变量的话vars)equals()hasCode()toString()copy()
2017-06-05 07:10:55
395
原创 4.2 Kotlin 语法精简版(1)
定义包定义包应该在源文件的最上面,这和Java一样。package my.demoimport java.util.*// ...但是Kotlin不要求文件夹和包名对应,源文件可以在文件系统中的任意的路径下。定义函数定义函数使用fun关键字, 既是’function’的简写,也是’fun’ 高兴,好玩的意思,一语双关。 两个Int参数 和Int返回值的函数fun sum(a: Int, b: In
2017-06-02 00:14:08
617
原创 4.1 Java语言和Kotlin语言对比(3)
Java 变长参数varargsJava类有一些方法定义时会使用不定长度的参数public class JavaArrayExample { public void removeIndicesVarArg(int... indices) { // code here... }}在这种情况下,需要使用扩展操作符(*)来传递参数IntArrayval javaObj =
2017-06-01 09:34:31
1009
原创 4.1 Java语言和Kotlin语言对比(2) 泛型和数组
4.1 Java语言和Kotlin语言对比(2) 注意Java中基础类型的装箱类型当用作类型参数时被映射成了平台类型。 例如,List<java.lang.Integer> 在Kotlin中被映射成List<Int!> 集合类型在Kotlin中有可能是只读或者不可变的,所以Java的集合类型被映射如下:(本表中的所有Kotlin类型都在包kotlin.collections下) Ja
2017-05-31 10:28:38
1654
原创 4.1 Java语言和Kotlin语言对比(1)-基础类型
4.1 Java语言和Kotlin语言对比(1)void类型的映射Java中返回void类型,对应的Kotlin返回Unit。Java中特殊标识的转义有些Kotlin定义的关键字,是Java中的合法标识名,例如in, object, is etc。如果Java库使用一个Kotlin的关键字作为函数名,可以转义之后再调用改函数,转义时添加 bracktick(`)字符foo.`is`(bar)空指针
2017-05-26 10:23:53
745
原创 Android Support库的源码位置
Android Support库的源码位置在sdk 目录下/Users/chanson.cc/Library/Android/sdk/extras/android/m2repository/com/android/supportsupport-v4-24.1.1-sources.jar是包含代码的jar, 使用JD-GUI可以打开查看代码。 从24.1.1 之后的就都是aar 的库了, 无法再通过这
2017-05-25 11:31:01
6266
1
原创 3 创建一个kotlin新工程
创建一个kotlin工程在Android Studio中创建一个新工程在Android Studio 3.0 中,相比创建一个java工程来说, 创建一个kotlin工程只是多点一下,选中Include Kotlin Support 即可, 其他步骤和创建java 工程是一样的。 1. 在Android Studio 中 点击File -> New -> New Project 或者在欢迎页向导窗
2017-05-25 09:41:58
906
原创 10.1 Converting json to data classes
10.1 Converting json to data classes处理json数据,是常见的工作,解析和处理json技术含量低,考验的是细心和耐心,原始的办法的就是对着json字符串一个一个的解析,一般做法是用gson 或jackson 等转换工具,辅助json的解析。 这里介绍一个直接把json串转成java 代码的工具和使用方法,可以提高生产效率,减少人工手误出错。10.1.1 JavaG
2017-05-24 09:35:55
814
原创 1 Introduction To Kotlin
1 Kotlin 简介1.1 What is Kotlin?Kotlin 是一种新的语言,2010年开始发布,由JetBrain 领导开发,后来被Google 资助,发布到Apache的开源许可下,正式版1.0 是在2016年2月发布,目前最新版本是2017年4月25日发布的v1.1.2-2, 免费,开源。 吸收了很多现代语言的特性,相比Java来说,语法更简介,支持很多新的语言特性,函数式编程,高
2017-05-23 09:13:55
528
原创 2 Getting ready 准备工作
2 Getting ready 准备工作2.1 Android Studio写本文的时候,正是2017 Google IO 大会时期,发布了android studio 3.0 Canary 1 版本,正式全面支持kotlin 作为正式编程语言。 旧版本的Android Studio 的可以使用插件的方式来支持kotlin。这里介绍的是3.0 版本的Android Studio。Android St
2017-05-23 08:49:26
361
原创 Kotlin 安卓开发
Kotlin for Android DevelopersI. About this book II. Is this book for you? III. About the author 1 Introduction 1.1 What is Kotlin? 1.2 What do we get with Kotlin? 2 Getting ready 2.1 Android Stu
2017-05-22 17:54:27
739
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人