Android插件化學(xué)習(xí)

非侵入試獲取Context進(jìn)行SDK初始化

1、在一個(gè)library或者一個(gè)model中獲取context,來(lái)完成一些初始化的工作,可以使用
ContentProvider
ContentProvider是Android四大組件之一,一般用于不同應(yīng)用中的數(shù)據(jù)交互和共享。并且這個(gè)組件會(huì)在程序運(yùn)行時(shí)進(jìn)行初始化調(diào)用我們可以利用這個(gè)組件去獲取Context和進(jìn)行一些SDK的初始化,并且可以全局獲取Context;

ContentProvider的onCreate剛好處于Application#attachBaseContext()和Application#onCreate()中間,并且也能獲取Context,也具備了初始化SDK的能力。

public class ApplicationProvider extends ContentProvider {
    @SuppressLint("StaticFieldLeak") static Context context;
    @Override
    public boolean onCreate() {
        context = getContext();
        //其他需要初始化實(shí)現(xiàn)的代碼
        ....
        return true;
    }

在SDK的AndroidManifest.xml注冊(cè)ApplicationProvider

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ifaa.mno" >
    <application>
        <provider
            android:name=".ApplicationProvider"
            android:authorities="${applicationId}.contextprovider"
            android:exported="false" />
    </application>
</manifest>

2、對(duì)于SDK的初始化,也可以這么搞,外界不需要手動(dòng)在Application進(jìn)行初始化

優(yōu)點(diǎn):

  • 對(duì)于固定的初始化配置,可以使用ContextProvider方案減少調(diào)用方的配置對(duì)于介入方來(lái)說(shuō)無(wú)感,也避免上了好多對(duì)接上的錯(cuò)誤。降低耦合度,抽離代碼方便。

缺點(diǎn):

  • 不能執(zhí)行耗時(shí)操作,否者會(huì)讓app啟動(dòng)變慢,并且接入方無(wú)法進(jìn)行優(yōu)化。對(duì)于耗時(shí)操作應(yīng)該由接入方?jīng)Q定合適做初始化操作。
  • 多個(gè)SDK使用ContentProvider初始化,無(wú)法保證不同SDK初始化循序。
  • 注意暴露風(fēng)險(xiǎn),聲明provider的時(shí)候,配置exported為false。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容