Kotlin 中的懒加载 lazy

两者都是 Kotlin 中用来延迟加载类属性的方法

lateinit var 不能用来修饰基本类型,因为 Kotlin 中用来判断变量是否初始化是通过判断该变量是否为 null 来作为依据的,而基本类型在初始化的时候会默认赋值,所以 lateinit var 不能修饰基本类型

阅读更多

去除 Apk 中的重复资源文件

在 Android Apk 包体积治理的项目中,对于资源文件的治理是其中很重要的一部分,其中,做好前期的压缩删除等工作是前提条件,但在后续的开发迭代过程中,如何进行长期的治理、预警和自动化,是值得深入探讨的问题

在包体积治理的过程中,我们知道对于 apk 的组成,其中资源文件占了很大的一部分,需要对其进行处理

阅读更多

ViewModel 原理

ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。

如何使用

1
private val viewModel = ViewModelProvider(this).get(MyCustomViewModeClass::class.java)
阅读更多

Java 并发编程之 ReentrantLock


ReentrantLock,可重入锁,基于 AQS 的机制,实现了公平锁和非公平锁,给开发者提供了一个更为灵活的锁实现,既然是个锁,ReentrantLock 也实现了 Lock 接口

阅读更多

Java 并发编程之 AQS


AQS,全称为 AbstractQueuedSynchronizer,是 JUC 包中的一个抽象类,为开发者提供了编写同步锁的机制
其中封装了 FIFO(first in first out) 的队列

阅读更多

ConcurrentHashMap 源码阅读笔记


本文基于 JDK 1.8 分析

HashMap 是非线程安全的类,在多线程并发 put 导致 resize,在 transfer 过程中可能导致死锁或者数据丢失

而 ConcurrentHashMap 则是一个线程安全的 Map 类,在 HashMap 的基础上做了线程安全的处理

阅读更多

RxJava2 原理解析


RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.
RxJava 是 Reactive Extensions 的 Java VM 实现:一个使用可观察序列组合异步和基于事件的程序的库。

RxJava 通过观察者订阅被观察者进行事件的分发,并提供了很多被观察者(即事件发送者)的创建方法和事件转换的操作符函数(map、flatmap、filter 等等)

阅读更多

Java 动态代理

代理模式

所谓代理模式,就是指「代理对象」(或者我们形象地称呼为中介),通过实现接口类具有了接口的能力,并通过和「实际的生产者」产生联系,将「实际生产者」的能力通过自己中转给「客户(调用者)」

客户不直接通过「实际生产者」获取信息,而是跟「代理对象(中介)」打交道获取信息

阅读更多

Android 中的图片内存

提出问题

先提出一个问题,将两张分辨率相同(48px * 48px),但文件大小不同的 png 图片,放在 drawable-xhdpi 文件夹下,在不同分辨率的手机上,所加载出来的 Bitmap 的占用内存大小分别是多少?

阅读更多