自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 Kotlin细节十六:Kotlin 的接口不支持SAM

Kotlin中 定义的 接口和 java中定义的接口区别java中定义的接口 和方法public interface CallBack { void onSuccess(int response); static void getCallBack(CallBack callBack){ callBack.onSuccess(1); }}Kotlin 中定义的 接口和方法class BodyTemperatureModel { interfac

2020-06-28 00:14:40 306

原创 Android Dialog Window探究

Dialog 的Window 的DecorView 的边距常见问题:Dialog 无法设置全屏原因:Window 的 LayoutParams 为 WindowManager.LayoutParams.MATCH_PARENT 时,并且没有为 Window 对应的 DecorView 设置 背景色时:没有设置android:windowBackground没有手动为DecorView 设置背景色。此时DecorView 会 为自己设置padding 。导致Dialog 内容无法充满全屏。

2020-05-28 02:31:58 592

原创 Android drawable- xxx 目录下图片加载到内存后的大小

资源目录的 densityDpi 与屏幕的 targetDensitydp : dp 是物理长度 ,大小为 1 /160 英寸density :1dp=density px ,但是它和屏幕大小一点关系都没有,只和分辨率有关:1080*1920:density为3.01080*2160:density为2.75720*1280:density为2.0densityDpi...

2020-05-05 21:30:13 373

原创 Android 触摸事件系列二:onClick事件是如何触发的

Onclick 事件的触发条件先来废话一下。setOnClickListenerView 没有重写 OnTouchEvent ( 默认情况下 所有触摸事件返回都是clickable,也就是如果View 是可点击的,那么它会消耗一切事件)手指没有移动出View的范围。有抬起动作为什么手指移除View 的范围,不会触发OnClick?onTouchEvent Move 动作处理:...

2020-05-03 15:52:40 1168

原创 Android 触摸事件系列一:原始View与ViewGroup的事件处理

View 的dispatchTouchEvent 与 onTouchEventpublic boolean dispatchTouchEvent(MotionEvent event) { ...... if (onFilterTouchEventForSecurity(event)) { //noinspection SimplifiableIfStateme...

2020-05-03 01:02:38 179

原创 Android Service 总结:生命周期与onReBind

start 和 bind 启动Service 的区别在只使用一种启动方式的情况下,生命周期的区别。Activity 调用 startService() 创建的Service的生命周期 与 Activity 无关。需要自己控制Service 销毁。Activity 调用 bindService() 创建的Service的生命周期 与 Activity 有关,Activity销毁则 Se...

2020-05-02 18:53:37 1041 1

原创 Android Binder总结

Android 进程间通信的方式使用 Intent使用文件共享使用 Messenger(基于Binder)使用 AIDL(基于Binder)使用 ContentProvider使用 Socket Socket socket = new Socket("localhost",8688); ServerSocket serverSocket = new ...

2020-05-02 16:56:58 159

原创 Android Serializable 自动生成serialVersionUID

Android Intent 传递序列化数据 intent.putExtra("xxx", SerializableXXX); SerializableXXX bean =(SerializableXXX) intent.getSerializableExtra("xxx");serialVersionUID 的作用只要实现Serializable 就可以实现序列化,那么s...

2020-05-02 16:14:02 378

原创 Http和Http2和Https 的特性总结

Http1.0 到Http2.0 的升级场景: 浏览器访问网页,网页内有 5张图片。五个图片资源存在同一台服务器上。按照HTTP1.0的做法,这需要建立五个TCP连接,每个连接负责一个资源请求。创建一个TCP连接需要3次握手,而释放连接则需要4次挥手手。重复的创建和释放连接极大地影响了网络效率。Http1.1 升级:HTTP/1.1提出了Keep-Alive机制:当一个HTTP请求的数据传输...

2020-04-29 11:59:25 193

原创 Android 启动优化

闪屏页的处理当App 拥有闪屏页时,也就是点击桌面图标显示的 第一个Activity 。处理方式。透明背景Window 背景设置为 Logo耗时统计冷启动优化异步加载延迟加载启动优化一、新浪闪屏页性能优化之启动优化...

2020-04-29 00:57:31 118

原创 Kotlin细节十五:作用域函数与 this it 关键字

高阶函数中 的 it 与this我们在定义高阶扩展函数的时候 ,某个参数是函数类型,假如想要把 扩展对象传递给 这个函数类型 。可以通过 两种方式 定义 函数类型f: T.() -> Unit ,函数类型为带接收者的函数类型,接收者和扩展对象一致f: (T) -> Unit , 函数类型的参数为 扩展对象类型。关于 it 和thisthis 用于 带...

2020-04-18 20:01:46 3661

原创 Kotlin细节十四:密封类和枚举类

使用情况密封类和枚举类,都使用于描述某种情况的集合,比如播放器的播放状态 。枚举类枚举类和java 并没有区别 。每一个枚举都是枚举类的实例。所以不需要我们自己创建,但是也限制了我们为枚举设置动态属性。这也是和密封类的区别。enum class Funcs:Runnable{ Car{ override fun run() { print...

2020-04-17 16:49:49 896

原创 Kotlin细节十三:data class 的优点 与局限

date class 限制date class 不能是 open 的,也就是没法被其他类继承date class 不能是抽象的date class 不能是 内部类date class 自动生成的代码是什么样的data class man(val name:String,val age:Int){}反编译后可以看到自动生成了get sethashcodeequals...

2020-04-17 15:46:19 1877

原创 Kotlin细节十二:object 关键字

object 对象声明java 中 要声明一个静态类 ,必需声明成静态内部类,也就是必须依赖非静态的类,而且 java 中的静态变量,静态方法,和非静态的 方法放在了一起。这种方式是混乱的,所以Kotlin 引入了 object 对象声明 。就像声明一个变量一样,声明一个静态对象(不需要调用构造器获得)。对象声明的初始化过程是线程安全的并且在首次访问时进行。需引用该对象,我们直接使用其名...

2020-04-16 23:51:48 198

原创 Kotlin细节十一:延迟初始化

lateinit 和by lazy当我们不想声明一个类型可空的对象,而且也没法在构造器中初始化它,可以通过两种方式解决lateinit ,告诉编译器,不要因为属性变量未被初始化而报错。这是一种压制性的做法,lateinit 不能修饰基本类型lazy是一种属性委托,lazy() 是接受一个 lambda 并返回一个 Lazy < T > 实例的函数,返回的实例可以作为实现延迟属...

2020-04-16 21:19:56 404 1

原创 Kotlin细节十:koltin 构造函数 ,构造块与java 的区别

java 构造块 与 kotlin init 的区别koltin 的init 块可以访问 构造器中的参数 。但是java 的构造块 无法访问构造函数的 参数。Kotlin和java 构造器的区别java 可以有多个构造器 ,而且互相之间可以没有依赖,但是Kotlin 认为这是一个弊端,让我们类的构造变的混乱化。Kotlin 的构造器分为主构造器和 次构造器。如果定义了主构造器,那么次构造器...

2020-04-16 16:56:53 349 1

原创 Kotlin细节九:函数类型与Lambda 表达式

java Lambda1.Java 的lambda 表达式 是接口式函数。:函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为 lambda 表达式。 Lambda 表达式和方法引用(实际上也可认为是Lambda表达式)上。如定义了一个函数式接口如下:@FunctionalInterface...

2020-04-16 01:35:48 353 3

原创 Kotlin细节八:表达式

表达式与语句的区别表达式是有返回值的,而语句是没有返回值的,例如 java中的if else 和 kotlin if else 的区别。Kotlin 中 ,if else ,when ,try catch 都是表达式,可以作为返回值使用。运算符和中缀表达式通过 operator 关键字 和扩展函数可以实现运算符重载 。标有 infix 关键字的函数也可以使用中缀表示法(忽略该调用的点...

2020-04-15 23:40:07 95

原创 Kotlin细节七:空安全与类型转换安全

平台类型平台类型,来自java 代码的 对象引用。由于无法确定是空还是非空用XXX!来表示 。平台类型的安全性由使用者自己决定,可以将平台类型传递给 非空类型。public class JavaClass { String name; String career = "码农";}fun main(){ var javaClass:JavaClass = JavaC...

2020-04-15 21:40:05 217

原创 Kotlin细节六:类

类的定义:成员变量和 构造方法成员变量必须有确定的值 ,可以在声明时赋值,也可以在构造方法中赋值Kotlin 的构造方法 可以 放在类 的内部,也可以放在头部,也可以省略 。class SimpleClass { var i:Int // 需要在构造方法中执行一些操作时,这种写法最合适 constructor( x:Int){ this.i = x ...

2020-04-15 11:18:40 101

原创 Kotlin 细节五:函数

Kotlin 的函数与方法在Java 中好像是没有函数这个概念的,都是方法。但是在Kotlin 中函数是一等公民,它可以不依赖于类,如顶级函数。而方法是指,带接收者的函数 如Object.toString() 。 Object 就是接收者 。XXX.xxx() 的就是方法。当然函数与方法直接是可以转换的。 例如:python 的self 参数。class KotlinFuction {...

2020-04-14 16:06:39 88

原创 Kotlin 细节三:集合与泛型

Kotlin 的Collections 与Java 的关系Kotlin 通过typealias 关键字将 Kotlin 的集合映射为 java的集合。目的是:为了以后在更多的平台上运行。只提供接口,具体实现依赖于平台。@SinceKotlin("1.1") public actual typealias RandomAccess = java.util.RandomAccess@Since...

2020-04-14 14:48:36 641

原创 kotlin 细节四:静态函数和 静态变量

为什么Kotlin 没有static 关键字在java 的世界中 ,类是一级公民,所有的东西,方法呀,变量啊都必须依赖于类 。但是有的方法和类本身没有关系,例如 JDK 中 的Collections了。而Kotlin 中函数是一级公民,因此就不需要去创建这些无意义的类, 相反,可以把这些函数接放到代码文件的顶层,不用从属于任何的类。如果你需要从包外访问它,则需要 import 关键字。顶层函...

2020-04-14 10:44:07 572

原创 kotlin 细节二:区间的概念和使用

区间的定义kotlin 的 区间是通过 运算符重载和 扩展函数来实现的: val range1= 1..10 // 闭区间 val range2 = 1 until 10 // 左闭右开区间 val range3 = 1 ..10 step 5 // 带步长的区间 val range4 = 10 downTo 1 ...

2020-04-13 23:29:15 746

原创 Kotlin 细节一:基础数据类型 与数组

Kotlin原始类型长整形 必须以大写的 L结尾,而浮点型可以以 d 和f 结尾Kotlin 中 == 代表java 的equal , === 代表地址比较kotlin 不支持Number 类型的 自动转化,如 int 自动转long ,需要调用parse方法kotlin 1.3支持 无符号类型kotlin 中没有 int、long、char、double 这样的...

2020-04-13 22:42:55 284

原创 Coordinatelayout 与有向无环图的拓扑排序

Coordinatelayout 如何处理子View之间的依赖关系通过继承 public abstract static class Behavior 并且override 以下几个方法 public boolean layoutDependsOn(CoordinatorLayout parent, V child, View dependency); publ...

2020-03-27 14:17:29 231

原创 java 的泛型擦除与 TypeToken

来自Retrofit 源码的一个疑问public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user);}查看反编译 后的class 文件:import retrofit2.Call;publi...

2020-03-24 00:45:14 431

原创 Java Type 类型详解

Type和泛型的关系Java 5以后加入了泛型特性,关于泛型的类型是什么?就用用到Type 类来解释。package java.lang.reflect;public interface Type { default String getTypeName() { return this.toString(); }}Type 有4个子接口TypeVar...

2020-03-23 16:47:07 457 1

原创 java 深拷贝和浅拷贝

浅拷贝一般步骤:一、被复制的类需要实现Clonenable接口(不实现的话在调用clone方法会抛出CloneNotSupportedException异常), 该接口为标记接口(不含任何方法)二·、覆盖clone()方法,访问修饰符设为public。方法中调用super.clone()方法得到需要的复制对象。(native为本地方法)在浅克隆中,如果原型对象的成员变量是值类型,将复制一份...

2019-12-15 23:11:05 67

原创 Glide 缓存逻辑

Glide 缓存和picasso 的缓存有哪些不同Glide 的缓存策略和Picasso 的缓存策略上有哪些不同,Picasso 是被动清除缓存,也就是依赖于LRU 的 容量来清理 。Glide 可以在LRU的基础上添加了主动清理的功能。监听Activity 和 Fragment的 生命周期进行清理,也就是资源和他们绑定toDo 和生命周期绑定的清理工作,是如何清理的?Glide 缓存...

2019-12-08 19:59:02 126

原创 Kotlin闭包和java闭包的对比

一、kotlin的lambda 表达式对比java的内部类Kotlin 闭包 和 java 的区别 是在于对 方法 局部变量的处理。kotlin可以修改局部变量的引用。java 匿名内部类 ,访问的局部变量必须添加final声明 ,并且不能修改 方法局部变量的引用 。java 匿名内部类的构造方法中把 局部变量 x的引用传递给了自己创建的变量 copyX 。实际访问的是copyX。ko...

2019-11-22 17:00:07 613

原创 探秘Kotlin Lambda表达式在 jvm 上的实现

class FunctionTest { fun test(intNum: Int, func:(Int) ->Int){ print(" 测试 " +func(intNum)) } fun doTest(){ test(108){ it.plus(it) } }}这段代码通过jad...

2019-11-22 10:35:55 328

原创 java8 Stream 使用示例

/*** * java 8 的 Stream 使用到了 哪些 函数接口 ? * */public class JavaStreamTest { /*** * stream 的常见操作 * 操作分为 中间 操作和最终操作 * 中间操作得到的还是一个流 * 要想得到我们想要的结果 ,如输入, 装入一个集合 ,计算个数 ,就需要最终操作。 ...

2019-11-14 12:41:41 92

原创 Android Matrix原理及运用

1 Matrix 在Android 中的运用ImageView 缩放模式 setImageMatrix(mMatrix) 方法,可以自定义一个Matrix。 对 Bitmap 做相应的处理,如缩放,位移。Matrix 可以对 Rect 和 点的集合做变换处理 public void mapPoints(float[] pts) { mapPoints(pts, 0,...

2019-11-13 12:55:10 602

原创 java 8 方法引用使用介绍

/*** * * java 中 lambda 表达式的类型 是函数接口类型 : FunctionalInterface * 接口的 抽象方法 的参数 和返回值就是 Lambda 表达式的 参数和 返回类型 * * -> 分割函数的参数和 函数体。 单行的函数体可以省略大括号 * 由于类型可以推断,可以省略参数类型 * * 情况一 : 参数为空 ,括号不可以省略。 例...

2019-11-13 10:56:07 135

原创 LinkedHashMap Q&A

LinkedHashMap 在初始化的时候,有两种使用模式插入顺序 ,遍历时,按照put顺序输出访问顺序,这种情况下是否会扩容 ????当处于访问顺序模式的时候,什么情况下会删除eldest 元素。HashMap 是无序的 。那么LinkedHashMap 是如何保持有序的HashMap 以拉链法处理冲突, 数组下标对应的是 元素的hash 值 对数组长度的求余。LinkedHa...

2019-10-14 16:58:13 126

原创 从源码角度分析:ScrollView 嵌套 RecyclerView 的 高度测量

前言前几天在hongyang 大神的公众号上看到了一篇关于 ScrollView 嵌套RecyclerView 的文章,https://juejin.im/post/5d75e8cd6fb9a06afd662bf3作者从使用角度详细阐明了这种做法的弊端,恰好前段时间重构项目的时候研究了一下这个问题,在此做一些补充说明。无耻的盗了图 - - 。<ScrollView xmlns:a...

2019-09-24 21:12:21 1069 1

原创 java 的泛型和类型擦除

一、什么是泛型泛型 ,它只在程序源码中存在,在编译后的字节码文件中,就已经被替换为原来的原生类型(Raw Type,也称为裸类型)了,并且在相应的地方插入了强制转型代码,因此对于运行期的Java语言来说,ArrayList与ArrayList就是同一个类。所以说泛型技术实际上是Java语言的一颗语法糖,Java语言中的泛型实现方法称为类型擦除,基于这种方法实现的泛型被称为伪泛型。二、什么是...

2019-09-24 09:38:48 250

原创 java String 总结

String 对象的创建方式有哪几种使用String 的构造方法 (Android 中重写了构造方法,会Throw Exception)使用 = “abc” 的方式使用字符串连接符+和其余字符串进行拼接创建String s = new String(“abc”) 创建了几个对象先在常量池中创建一个字符串"abc" 对象 假设不存在的话, 然后在 java 堆中创建一个String 对...

2019-09-17 11:17:57 64

原创 ANDROID SDK 和JDK ThreadLocal 实现与区别分析

ANDROID SDK 和JDK ThreadLocal 分析。

2016-04-18 10:56:45 4741

空空如也

空空如也

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

TA关注的人

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