Android組件化開發(fā)路由的設(shè)計(jì)

調(diào)研了一下目前的路由框架,ARouter(阿里的),ActivityRouter都使用了apt技術(shù) 編譯時(shí)注解,個(gè)人想法是一口吃不成胖子,先做個(gè)比較實(shí)用的。 VpRouter路由框架主要應(yīng)用于組件化開發(fā)中

設(shè)計(jì)目的

  • 解耦
  • 跨模塊跳轉(zhuǎn)
  • 方便服務(wù)器配置schema,實(shí)現(xiàn)動(dòng)態(tài)配置跳轉(zhuǎn)目標(biāo)
  • 對(duì)外部提供遠(yuǎn)程訪問的功能,實(shí)現(xiàn)跨應(yīng)用調(diào)用響應(yīng)

主要功能點(diǎn)

  • 支持intent,http,schema三種跳轉(zhuǎn)
  • 路由表支持xml配置,可自定義,支持多路徑
  • 有攔截器
  • 同時(shí)支持反射和隱式意圖
  • 支持結(jié)果回調(diào)
  • 支持參數(shù)傳遞
  • 鏈?zhǔn)秸{(diào)用
  • 支持url模式傳參
  • 支持配置多個(gè)webview 實(shí)現(xiàn)指定非默認(rèn)的webview啟動(dòng)url
  • 支持配置多個(gè)prefix

重要的類

  • VpRouter 單例模式 入口類
  • AbsRouter 路由抽象類 主要代碼
  • RouterTable 路由表
  • IRouterInterceptor(攔截器) IRouterResultCallback(結(jié)果回調(diào))

類圖

vprouter.png

加載路由配置文件

//導(dǎo)入路由表 在application的onCreate中
VpRouter.load(getApplicationContext(),"router.xml");

路由配置文件

<?xml version="1.0" encoding="utf-8" ?>
<root>
    schema-prefix>
        <prefix>vf://</prefix>
        <prefix>vipjr://</prefix>
        <prefix>vpjr://</prefix>
    </schema-prefix>
    <default-webview>vpjr://h5.page</default-webview>
    <rule>
        <schema>vpjr://h5.page</schema>
        <!--<action>webview</action>-->
        <class>com.vip.hybrid.h5container.H5WebViewActivity</class>
    </rule>
    <rule>
        <schema>vpjr://h5.page.pay</schema>
        <!--<action>webview</action>-->
        <class>com.vip.vpal.paydesk.support.h5.H5ContainerActivity</class>
    </rule>
    <rule>
        <schema>vpjr://paycode.entry</schema>
        <!--<action>1111</action>-->
        <class>com.vip.vpal.paycode.presentation.activity.PaymentEntryActivity</class>
    </rule>
    <rule>
        <schema>vpjr://guide</schema>
        <!--<action>basemodule.test.mainactivity</action>-->
        <class>com.vip.vf.android.GuideActivity</class>
    </rule>
</root>
  • schema-prefix: 前綴
  • default-webview: 默認(rèn)webview的schema
  • 每一個(gè)rule節(jié)點(diǎn)代表一組路由規(guī)則,被解析成Rule對(duì)象

使用示例

//啟動(dòng)url 默認(rèn)的webview
VpRouter.get().context(this).jump("http://www.vip.com?web_title=唯品會(huì)");
//指定webview啟動(dòng)
VpRouter.get().context(this).webView("vpjr://h5.page.pay").jump("http://www.vip.com");

//最復(fù)雜的使用
VpRouter.get()
        .context(this)
        .setInterceptor(new IRouterInterceptor() {
            @Override
            public boolean cancel() {
                return false;//return true 會(huì)把本次跳轉(zhuǎn)攔截掉
            }

            @Override
            public Bundle addExtras() {
                return null;//返回Bundle 會(huì)添加到Intent中
            }
        })
        .setResultCallback(new IRouterResultCallback() {
            @Override
            public void onSuccess() {
                //跳轉(zhuǎn)成功的回調(diào)
            }

            @Override
            public void onFail(RouterError error) {
                //跳轉(zhuǎn)失敗的回調(diào)
                LogUtils.d("error:"+error);
            }
        })
        .extra("key","value")
        .extra("key2","value2")
        .flags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
        .jump("vf://paycode.entry?title=1111");//支持url傳參

//最簡(jiǎn)單的使用
VpRouter.get().context(this).jump("vpjr://guide");
VpRouter.get().context(this).jumpForResult("vpjr://guide",REQUEST_CODE);//REQUEST_CODE>0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評(píng)論 25 709
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,273評(píng)論 6 342
  • 2017/07/19 59/70 冥想5分鐘 晚上,因?yàn)樘^關(guān)注呼吸,在剛開始冥想時(shí),呼吸有些不夠自然。潛意識(shí)讓自...
    a4ba0928273c閱讀 304評(píng)論 0 0
  • 90%的人猝死都跟頸椎有關(guān)。 肩頸堵了——頭疼,頭暈了。肩頸堵了——血壓上來了。肩頸堵了——睡眠不好,多夢(mèng)了。...
    快樂菜神閱讀 222評(píng)論 0 0

友情鏈接更多精彩內(nèi)容