ConcurrentHashMap 源码阅读笔记
本文基于 JDK 1.8 分析
HashMap 是非线程安全的类,在多线程并发 put 导致 resize,在 transfer 过程中可能导致死锁或者数据丢失
而 ConcurrentHashMap 则是一个线程安全的 Map 类,在 HashMap 的基础上做了线程安全的处理
本文基于 JDK 1.8 分析
HashMap 是非线程安全的类,在多线程并发 put 导致 resize,在 transfer 过程中可能导致死锁或者数据丢失
而 ConcurrentHashMap 则是一个线程安全的 Map 类,在 HashMap 的基础上做了线程安全的处理
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 等等)
所谓代理模式,就是指「代理对象」(或者我们形象地称呼为中介),通过实现接口类具有了接口的能力,并通过和「实际的生产者」产生联系,将「实际生产者」的能力通过自己中转给「客户(调用者)」
客户不直接通过「实际生产者」获取信息,而是跟「代理对象(中介)」打交道获取信息
先提出一个问题,将两张分辨率相同(48px * 48px),但文件大小不同的 png 图片,放在 drawable-xhdpi 文件夹下,在不同分辨率的手机上,所加载出来的 Bitmap 的占用内存大小分别是多少?
在 Android 中,使用 Handler 主要用于不同线程间的通信
本文基于 Target 30 的 Android 源码进行分析
本文解释 Java 中的字符串编码
Android 中 view 的测量机制
在 Android Kitkat (Android 4.4 Api 19)开始,Android 提供了一套存储访问框架(Storage Access Framework),简称 SAF。开发者可以在应用内使用该框架,通过用户的操作获取/保存/修改手机中的文件等
本文是对 关于 Android 的文件存储目录的补充
在 Android Q 后,获得 External Storage 的权限后 使用 Environment.getExternalStorageDirectory 和 File Api 对外置存储中的文件进行操作 这种方式已经不被允许了,需要开发者进行适配,后续开发者需要通过 Storage Access Framework 或者 MediaStore 的 Api 来对 External Storage 中的文件进行操作
众所周知,在 Android 中,文件的存储有多个路径可供存储,也提供了多个 Api 使用,那这些 Api 到底是用来是哪个目录,又有什么区别呢。