架構日記(一) 模塊化多Moudle下的Application引用方式

傳統的項目結構中Application毫無疑問,肯定是放在app目錄下的。

說一說我遇到問題的場景:

 本人正在base moudle中新建RxJava+Retrofit+OkHttp的請求框架式,在新建攔截器Interceptor的時候有一個地方需要用到Application。這就有點尷尬了呀。

其實我們完全可以換一個思路嘛,Lib模塊不就是要一個Application嗎,給他~

Moudle  base作爲一個基礎庫或者說是公共依賴包,所有的Moudle都是需要依賴它的,那麼就來一個BaseApplication吧

public class BaseApplication extends Application {

    /**
     * 系統上下文
     */
    private static Context mAppContext;

    @Override
    public void onCreate() {
        super.onCreate();
        mAppContext = getApplicationContext();

    }

    /**
     * 獲取系統上下文:用於ToastUtil類
     */
    public static Context getAppContext() {
        return mAppContext;
    }
}

接下來我們看看app工程,首先是app-gradle

implementation project(':base')

接下來就是繼承了

public class MyApplication extends BaseApplication {

    private RefWatcher refWatcher;
    @Override
    public void onCreate() {
        super.onCreate();
        if(BuildConfig.DEBUG){
            ARouter.openDebug();
        }
        ARouter.init(this);
        refWatcher= setupLeakCanary();
    }

    private RefWatcher setupLeakCanary() {
        if (LeakCanary.isInAnalyzerProcess(this)) {
            return RefWatcher.DISABLED;
        }
        return LeakCanary.install(this);
    }

    public static RefWatcher getRefWatcher(Context context) {
        MyApplication leakApplication = (MyApplication) context.getApplicationContext();
        return leakApplication.refWatcher;
    }
}

至於使用方式不用多說了吧,繼承來的不是私有的都可以用~~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章