1. 前言

一般情况下,当我们做了一个 SDK 提供给其他开发者使用的时候,总是会预留一个初始化接口,然后要求使用者去调用它以让 SDK 生效。这种模式会导致用户的业务里堆满了各种各样的 XXX.init(),并且如果用户忘记调用我们的初始化方法也会导致 SDK 失效。无侵入的完成 SDK 初始化意味着不需要开发者调用任何代码,只需要集成依赖,SDK 就可以自动进行初始化并生效。

2. 实现原理

我们可以在 SDK 内注册一个 ContentProvider,系统会自动调用 ContentProvider 的 onCreate 方法,这样我们只需要在 onCreate 里添加初始化代码即可。如果你的 SDK 需要用到 Context 对象,可以使用 ContentProvider 提供的 getContext() 方法。LeakCanary,Picasso 就是通过这种方式来完成初始化。

3. 需要注意的点

使用 ContentProvider 实现无侵入初始化需要让用户额外承担 ContentProvider 带来的成本,以及如果你的初始化比较耗时那么还是把调用初始化的工作交给用户比较好。