在主module的application中配置其他module的application
public class MyApplication extends Application{
private ModuleApplication moduleApplication;
@Override
public void onCreate() {
//同步Module的Application的onCreate
if (moduleApplication!= null){
moduleApplication.onCreate();//用于执行module的一些自定义初始化操作
}
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
moduleApplication= getModuleApplicationInstance(this);
try {
//通过反射调用moduleApplication的attach方法
Method method = Application.class.getDeclaredMethod("attach", Context.class);
if (method != null) {
method.setAccessible(true);
method.invoke(moduleApplication, getBaseContext());
}
} catch (Exception e) {
e.printStackTrace();
}
}
//映射获取ModuleApplication
private ModuleApplication getModuleApplicationInstance(Context paramContext) {
try {
if (moduleApplication== null) {
ClassLoader classLoader = paramContext.getClassLoader();
if (classLoader != null) {
Class<?> mClass =
classLoader.loadClass(moduleApplication.class.getName());
if (mClass != null)
moduleApplication= (ModuleApplication) mClass.newInstance();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return moduleApplication;
}
}