修复 模块加载 类型转换异常

Signed-off-by: 董宏宇 <martindhy@gmail.com>
This commit is contained in:
董宏宇
2021-10-15 18:57:07 +08:00
parent 0e119f8f55
commit da955835a2
35 changed files with 321 additions and 219 deletions

View File

@@ -29,6 +29,11 @@ public interface MogoModulesHandler {
*/
void loadFunctionModules();
/**
* 架构升级v1.1加载功能模块
*/
void loadFunctionModulesServer();
/**
* 加载地图
*

View File

@@ -5,8 +5,10 @@ import android.content.Context;
import androidx.fragment.app.Fragment;
import com.alibaba.android.arouter.facade.template.IProvider;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider;
import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.MogoModule;
import com.mogo.module.common.MogoModulePaths;
@@ -43,6 +45,10 @@ public class MogoModulesManager implements MogoModulesHandler {
private Map< MogoModule, IMoGoFunctionProvider> mModuleFunctionProviders = new HashMap<>();
private Map< String, IMoGoFunctionProvider> mModuleNameFunctionProviders = new HashMap<>();
// 架构升级后的加载功能模块的方式
private Map< MogoModule, IMoGoFunctionServerProvider> mModuleFunctionServerProviders = new HashMap<>();
private Map< String, IMoGoFunctionServerProvider> mModuleNameFunctionServerProviders = new HashMap<>();
private static volatile MogoModulesManager sInstance;
private MogoModulesManager() {
@@ -121,6 +127,21 @@ public class MogoModulesManager implements MogoModulesHandler {
}
}
@Override
public void loadFunctionModulesServer() {
final List< MogoModule > modules = MogoModulePaths.getModuleFunctionServers();
if ( modules != null && !modules.isEmpty() ) {
for ( MogoModule module : modules ) {
Logger.d( TAG, "module.getPath():" + module.getPath() + " name: " + module.getName() );
IMoGoFunctionServerProvider provider = loadFunctionServer( module.getPath() );
if ( provider != null ) {
mModuleFunctionServerProviders.put( module, provider );
mModuleNameFunctionServerProviders.put( module.getName(), provider );
}
}
}
}
@Override
public void loadMapModule( int containerId ) {
Logger.d( TAG, "loadMapModule" );
@@ -168,7 +189,7 @@ public class MogoModulesManager implements MogoModulesHandler {
continue;
}
Logger.d( TAG, "加载基本模块:%s", baseModule.getPath() );
load( baseModule.getPath() );
loadBaseProvider( baseModule.getPath() );
}
}
@@ -181,6 +202,15 @@ public class MogoModulesManager implements MogoModulesHandler {
}
private IProvider loadBaseProvider(String path ) {
try {
return ( IProvider ) ARouter.getInstance().build( path ).navigation( getContext() );
} catch ( Exception e ) {
e.printStackTrace();
return null;
}
}
private IMogoModuleProvider load( String path ) {
try {
return ( IMogoModuleProvider ) ARouter.getInstance().build( path ).navigation( getContext() );
@@ -199,6 +229,15 @@ public class MogoModulesManager implements MogoModulesHandler {
}
}
private IMoGoFunctionServerProvider loadFunctionServer(String path ) {
try {
return ( IMoGoFunctionServerProvider ) ARouter.getInstance().build( path ).navigation( getContext() );
} catch ( Exception e ) {
e.printStackTrace();
return null;
}
}
private void addFragment( IMogoModuleProvider provider, int containerId ) {
if ( provider == null ) {
Logger.e( TAG, "add fragment fail cause provider == null, container is %s", ResourcesHelper.getResNameById( getApplicationContext(), containerId ) );
@@ -272,6 +311,23 @@ public class MogoModulesManager implements MogoModulesHandler {
if ( mModuleFunctionProviders != null ) {
mModuleFunctionProviders.clear();
}
if ( mModuleFunctionServerProviders != null ) {
Collection< IMoGoFunctionServerProvider > modules = mModuleFunctionServerProviders.values();
if ( modules != null ) {
for ( IMoGoFunctionServerProvider module : modules ) {
try {
Logger.d( TAG, "destroy module: " + module.getFunctionName() );
module.onDestroy();
} catch ( Exception e ) {
Logger.e( TAG, e, "onDestroy" );
}
}
}
mModuleNameFunctionProviders.clear();
}
if ( mModuleFunctionServerProviders != null ) {
mModuleFunctionServerProviders.clear();
}
mActivity = null;
}
}