前言
AndroidX出来一段时间了,从09年开始一直在做公司的quickstart和组件化的东西,基础框架搭建这一块也算是有一些成绩。从原来的功能的抽象的封装,到现在系统性质研究。
正文
新的项目启动,有利于做一些前沿技术的思想的学习和吸收。androidx问世以后,从长远角度出发,确实是android开发者的福音。谷歌终于开始布局对于开发者友好以一块的事情了。也许是长期依赖开发者对兼容包诟病很多,不管谷歌出于什么样的目的,长远看来确实是一件好事
然而,实际并没有那么简单
在开始使用androidx的时候也碰到了一些棘手的事情,比如如何将旧项目迁移到androidx上面来,还好google在as IDE上面增加了Migrate功能。虽然这个功能并不能搞定所有的事情,但是最起码是一个好的开始。修改的工作量稍微降低了一些。可能最费劲的要属material库的修改,并不能很好的支持迁移
废话不多说,今天就从core包的几个类讲起,他们分别是:
- ContextCompat
- IntentCompat
- ActivityCompat
- ActivityOptionsCompat
通过对这几个类的源码进行解读我们不难发现,这个兼容类,是为了帮我们处理不同Build.VERSION.SDK_INT 所对应的实现相同功能的不同调用方式
注意:⚠️SDK_INT 这个版本运行在硬件设备上的SDK版本,这个值不会被改变,除非硬件厂商提供OTA更新
/**
* The SDK version of the software currently running on this hardware
* device. This value never changes while a device is booted, but it may
* increase when the hardware manufacturer provides an OTA update.
* <p>
* Possible values are defined in {@link Build.VERSION_CODES}.
*/
public static final int SDK_INT = SystemProperties.getInt(
"ro.build.version.sdk", 0);
这里我们举例说明一下
ContextCompat
/**
* Return