
什么是Rabbits?
Rabbits是用于Android項(xiàng)目的路由組件。具有統(tǒng)一管理路由、支持動(dòng)態(tài)更新等方便的特性。因?yàn)榻?jīng)常用到「跳轉(zhuǎn)」這個(gè)詞,想一想兔子經(jīng)常和跳這個(gè)動(dòng)作聯(lián)系起來(lái),所以這個(gè)項(xiàng)目就叫Rabbits了。
什么是路由?
如果不接觸Web開(kāi)發(fā),通常看到路由應(yīng)該是“路由器”。和網(wǎng)絡(luò)中的路由類似,Web和App中的路由也是為了確定某種路徑,啟動(dòng)某個(gè)頁(yè)面或者組件。在Android中,路由一般都是完成url或者path到某個(gè)頁(yè)面(通常是Activity)的映射。
為什么需要路由?
startActivity足夠簡(jiǎn)單和直觀,那么為什么要用路由呢?用一句話來(lái)概括就是路由可以統(tǒng)一App內(nèi)的所有頁(yè)面導(dǎo)航,原生頁(yè)面或者WebView內(nèi)的網(wǎng)頁(yè)。如果你的項(xiàng)目涉及到用WebView展示某些內(nèi)容,比如新聞、論壇等App,使用路由即可統(tǒng)一這些頁(yè)面間的導(dǎo)航,業(yè)務(wù)邏輯層面完全不需要關(guān)心下一個(gè)頁(yè)面的實(shí)現(xiàn)。
路由的存在使得在WebView中跳轉(zhuǎn)到App原生頁(yè)面變得異常簡(jiǎn)單,只需要在WebViewClient的回調(diào)中加入幾行代碼。
支持更新的路由,更使得A/B Test和Fallback到Wap頁(yè)面變得輕而易舉,僅僅需要下發(fā)路由表。
為什么需要Rabbits?
去年下半年開(kāi)始,出現(xiàn)了很多個(gè)路由組件。Rabbits和他們相比又有那些不同呢?
編譯時(shí)注解
Rabbits使用編譯時(shí)注解,避免了運(yùn)行時(shí)注解的性能損耗,同時(shí)不要求對(duì)被注解的類進(jìn)行混淆排除,一定程度上還加強(qiáng)了安全性。
統(tǒng)一管理路由表
Rabbits的路由表使用json進(jìn)行統(tǒng)一管理,避免url注解散落到各處的尷尬。Activity和Fragment類的注解僅標(biāo)識(shí)該頁(yè)面的page name,一旦設(shè)置不需要改動(dòng),不易出錯(cuò)。
Rabbits還會(huì)根據(jù)路由表生成輔助類管理url常量,絕大多數(shù)情況,項(xiàng)目中不會(huì)出現(xiàn)手寫(xiě)url和path的情況,減少typo的可能性。
動(dòng)態(tài)更新
Rabbits提供動(dòng)態(tài)更新的能力,一旦更新,立即生效;同時(shí)會(huì)將最新的路由表緩存到文件,下次冷啟動(dòng)將直接加載。
Fragment支持
Rabbits支持對(duì)Fragment進(jìn)行注解,經(jīng)過(guò)一些設(shè)置之后,可以實(shí)現(xiàn)在Fragment間完成類似Activity的導(dǎo)航效果。
總結(jié)起來(lái),Rabbits配置簡(jiǎn)單,上手快,侵入性小,擴(kuò)展豐富,非常值得嘗試。
Rabbits上手
Rabbits的調(diào)用方法非常簡(jiǎn)單,流式調(diào)用也使得代碼比較美觀。下面通過(guò)幾個(gè)例子來(lái)看一下使用Rabbits的代碼長(zhǎng)什么樣子:
Ex1:
Rabbit.from(MainActivity.this)
.to(P.TEST)
.start();
Ex2:
BaseFragment fragment = (BaseFragment) Rabbit.from(this)
.obtain(uri)
.obtain();
// add fragment to activity
Ex3:
Rabbit.from(this)
.to(P.HOME)
.clearTop()
.start();
Ex4:
Rabbit.from(TestFragment.this)
.to(P.SECOND(123))
.start();
更多特性請(qǐng)查看Wiki和Demo項(xiàng)目 。 項(xiàng)目地址: Github