单例的线程安全及序列化问题

饿汉方式单例到底有多“饿”?
静态内部类为什么是延迟加载的?
枚举方式单例是延迟加载的吗?
饿汉、静态内部类、枚举方式单例为什么是线程安全的?
序列化为什么会破坏单例模式?
怎么防止序列化破坏单例模式?
枚举方式单例是怎么避免序列化破坏的?

Read More

简洁明了的刘海屏适配方案

网上关于刘海屏适配的文章不少,可讲清楚的却没几篇,大多是拷贝文档、长篇大论,甚至热情的贴图告诉你什么是刘海屏,到最后你仍不确定到底是怎样的一个适配方案,才能让你的 app 真正的适配所有的刘海屏机型。

看到这篇文章你就无需再怨恨各大厂商的跟风“刘海”了,因为刘海屏的适配十分简单。

Read More

Glide 源码分析

Glide 作为一个出色的图片加载框架,对其剖析的文章数不胜数。而若像大多数文章一样常规的去分析源码就没什么新意了,本文旨在发掘一些新的或相对陌生的知识点,以完善对 Glide 的认知,涉及源码基于 v4.8.0。

主要内容:

1.磁盘缓存
2.内存缓存
3.网络请求
4.图片转换
5.感知生命周期
6.下载及预加载
7.加载图片到通知栏和应用小部件中
8.图片格式及内存优化
9.请求优先级及原理
10.缩略图使用及原理
11.展示 gif 原理
12.自定义模块及延伸
13.兼容3.x写法

Read More

Android 端音频变声方案

音频变声实质上是通过调整 PCM 数据的音调、节拍等属性,实现听感上的变化。如果是 mp3、aac 等压缩音频,则需提前解码成 PCM 数据,Android 端可以通过 MediaExtractor 及 MediaCodec 解码得到 PCM,但调整音调、节拍仅靠 Android api 就无能为力了,只能集成第三方库来实现,常见的音频处理库有 FmodSoundTouch

Read More

Android 集成 FFmpeg (三) 获取 FFmpeg 执行进度

在以命令方式调用 FFmpeg 的时候,可能会执行一些比较耗时的任务,这时如果没有进度展示,用户可能会以为程序崩溃了,体验十分不好.能不能在以命令方式调用 FFmpeg 时实时获取执行进度呢?谷歌关键词 “Android FFmpeg 命令” 可以得到很多教程,但加上关键词 “进度”就没有相关文章了,看来以命令方式调用 FFmpeg 实时获取执行进度这个需求没有前人的肩膀可站,要开动自己的小脑筋了.

Read More