luckybilly / CC

业界首个支持渐进式组件化改造的Android组件化开源框架,支持跨进程调用。Componentize your android project gradually.
https://luckybilly.github.io/CC-website/
Apache License 2.0
4.04k stars 636 forks source link

在调用没有注册组件的时候,全局拦截器没有执行,我想在组件没有的时候,统一提示:功能正在开发中 #49

Closed dhhAndroid closed 6 years ago

dhhAndroid commented 6 years ago

调用代码,这个组件并没有注册:

            CC.obtainBuilder("TaskComponentCC")
                    .setContext(this)
                    .setActionName("showTaskDetails")
                    .build()
                    .call()

全局拦截器:

class ToastInterceptor : IGlobalCCInterceptor {
    override fun intercept(chain: Chain): CCResult {
        val ccResult = chain.proceed()
        if (!ccResult.isSuccess) {
            "功能正在开发中,敬请期待!".infoToast()
        }
        ccResult.logJson()
        return ccResult
    }

    override fun priority(): Int {
        return 100
    }

}
luckybilly commented 6 years ago

目前设计上没有支持这种需求,找不到组件时在ValidateInterceptor中就拦截掉了并返回-5的错误码,并且ValidateInterceptor是第一个被执行的拦截器。后续可以考虑一下是否可以将ValidateInterceptor的执行顺序后移。

另外提一下,ccResult.isSuccess并不能用来判断componentName是否存在,ccResult.isSuccess只有在调用组件成功并且组件中业务执行成功时才为true(详情可以查看CCResult里的代码),componentName指定的组件不存在时会返回错误码-5

dhhAndroid commented 6 years ago

我的想法是,不管这个CC调用是否成功,拦截器都是要执行一遍的,比如okhttp的拦截器,不管调用成功与否,拦截器都要执行,这样才能达到拦截器的目的。

luckybilly commented 6 years ago

@dhhAndroid 2.0版已将自定义拦截器置于ValidateInterceptor之前执行,2.0版本之后拦截器的执行顺序为:自定义全局拦截器 -> 为当前CC调用添加的局部拦截器 -> ValidateInterceptor -> LocalCCIntercepor/SubProcessCCInterceptor/RemoteCCInterceptor

dhhAndroid commented 6 years ago

@luckybilly 收到,大佬更新真快。