if (-1 != flags) {
intent.setFlags(flags);
} else if (!(currentContext instanceof Activity)) { // Non activity, need less one flag.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
// Set Actions
String action = postcard.getAction();
if (!TextUtils.isEmpty(action)) {
intent.setAction(action);
}
// Navigation in main looper.
runInMainThread(new Runnable() {
@Override
public void run() {
startActivity(requestCode, currentContext, intent, postcard, callback);
}
});
break;
case PROVIDER:
return postcard.getProvider();
case BOARDCAST:
case CONTENT_PROVIDER:
case FRAGMENT:
Class fragmentMeta = postcard.getDestination();
Object instance = fragmentMeta.getConstructor().newInstance();
if (instance instanceof Fragment) {
((Fragment) instance).setArguments(postcard.getExtras());
} else if (instance instanceof android.support.v4.app.Fragment) {
((android.support.v4.app.Fragment) instance).setArguments(postcard.getExtras());
}
return instance;
} catch (Exception ex) {
}
return null;
}
可以看到根据postcard中对应的目标Type,有不同的处理方式。例如ACTIVITY代表调转,FRAGMENT则会创建一个对应的对象并返回。
3. ARouter拦截器
public interface IProvider {
void init(Context context);
}
public interface IInterceptor extends IProvider {
void process(Postcard postcard, InterceptorCallback callback);
}
ARouter中自定义的拦截器需要继承IInterceptor,并重写

本文详细梳理了ARouter的源码,重点解析了拦截器的实现和服务管理。介绍了如何根据Name和路由查找服务,以及拦截器的执行流程,包括IInterceptor接口的init和process方法。此外,还提及了ARouter在Android开发中的应用。
1308

被折叠的 条评论
为什么被折叠?



