前言
- 在Android中,使用三方库或二方库时,通常都需要使用Context进行初始化
- 这篇文章将介绍一种基于ContentProvider 机制实现的无侵入获取Context的方法,希望能帮上忙
目录
1. 获取 Context 的常规方法
我们知道Context本身是一个抽象类,所以我们获取Context实际上是获取Context的实现类。简单来说:Context 使用了装饰模式,除了 ContextImpl 外,其他 Context 都是 ContextWrapper 的子类,具体分为:Application、Activity、Service;
1.1 获取 Application 对象
既然Application是Context的实现类,那么我们就可以直接使用Application对象来初始化第三方库,同时也可以使用一个静态方法将对象暴露出去:
// MainApplication.kt
class MainApplication : Application() {
companion object {
lateinit var application: Application
get
}
override fun onCreate() {
super.onCreate()
application = this
// 初始化第三方库
}
}
复制代码
1.2 获取 Activity & Service 对象
同样地, Activity & Service也是Context的实现类,那么我们就可以在程序运行过程中,按需初始化第三方库。例如使用Glide时,并不需要一开始就调用Glide#with(Context),只需要在显示图片的时候调用即可;
1.3 小结
- 优点
最常用的方式,实现简单,没有性能 / 稳定性风险;可以按需初始化第三方库 & 懒加载
- 缺点
需要获取ApplicationContext / Context(依赖方与库代码强耦合),不利于组件化
下面,我将介绍两种无侵入获取Context的方法,将涉及到Android进程的启动流程,若还不了解,请务必阅读文章:《Android | 带你理解 Appl