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)
阅读更多

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 等等)

阅读更多

Android 中的图片内存

提出问题

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

阅读更多

Android 存储访问框架 Storage Access Framework

在 Android Kitkat (Android 4.4 Api 19)开始,Android 提供了一套存储访问框架(Storage Access Framework),简称 SAF。开发者可以在应用内使用该框架,通过用户的操作获取/保存/修改手机中的文件等

阅读更多

Android MediaStore Api 使用


本文是对 关于 Android 的文件存储目录的补充

在 Android Q 后,获得 External Storage 的权限后 使用 Environment.getExternalStorageDirectory 和 File Api 对外置存储中的文件进行操作 这种方式已经不被允许了,需要开发者进行适配,后续开发者需要通过 Storage Access Framework 或者 MediaStore 的 Api 来对 External Storage 中的文件进行操作

阅读更多

关于 Android 的文件存储目录

众所周知,在 Android 中,文件的存储有多个路径可供存储,也提供了多个 Api 使用,那这些 Api 到底是用来是哪个目录,又有什么区别呢。

阅读更多