网易 - 组件化答疑

  • 作者:彭老师
  • 日期:2019-07-18
  • 类型:Android
  • 说明:本文源于彭老师手写摘要,如需转载请带上链接或注明出处!

★ 路由架构谨记核心一句话:接口 = 接口实现类.newInstance() ★


1、瑕疵:RouterManager原来这样:

switch (routerBean.getType()) {
case ACTIVITY:
Intent intent = new Intent(context, routerBean.getClazz());
intent.putExtras(bundleManager.getBundle());

// startActivityForResult -> setResult
if (bundleManager.isResult()) {
((Activity) context).setResult(code, intent);
((Activity) context).finish();
}

if (code > 0) { // 跳转时是否回调
((Activity) context).startActivityForResult(intent, code, bundleManager.getBundle());
} else {
context.startActivity(intent, bundleManager.getBundle());
}
break;

case CALL:
Class<?> clazz = routerBean.getClazz();
Call call = (Call) clazz.newInstance();
bundleManager.setCall(call);
return bundleManager.getCall();
}

RouterManager修改如下:

switch (routerBean.getType()) {
case ACTIVITY:
Intent intent = new Intent(context, routerBean.getClazz());
intent.putExtras(bundleManager.getBundle());

// startActivityForResult -> setResult
if (bundleManager.isResult()) {
((Activity) context).setResult(code, intent);
((Activity) context).finish();
} else {
if (code > 0) { // 跳转时是否回调
((Activity) context).startActivityForResult(intent, code, bundleManager.getBundle());
} else {
context.startActivity(intent, bundleManager.getBundle());
}
}
break;

case CALL:
return routerBean.getClazz().newInstance();
}

回复直播课有同学反馈:是不是但凡做了startActivityForResult()都要将当前Activity启动模式改为:

android:launchMode="singleTask"

答:不需要,参考上面修改代码


2、直播课最后跨模块接口交互失败,因为忘记加一行代码:

MainActivity - onCreate()

// 懒加载方式,跳到哪加载哪个类
ParameterManager.getInstance().loadParameter(this);

更多技术内幕请关注:网易云课堂 - 微专业 - 安卓高级开发工程师