傳統的項目結構中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;
}
}
至於使用方式不用多說了吧,繼承來的不是私有的都可以用~~