什么是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ò)中的路由類(lèi)似塔淤,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ì)被注解的類(lèi)進(jìn)行混淆排除,一定程度上還加強(qiáng)了安全性早抠。
統(tǒng)一管理路由表
Rabbits的路由表使用json進(jìn)行統(tǒng)一管理霎烙,避免url注解散落到各處的尷尬。Activity和Fragment類(lèi)的注解僅標(biāo)識(shí)該頁(yè)面的page name蕊连,一旦設(shè)置不需要改動(dòng)悬垃,不易出錯(cuò)。
Rabbits還會(huì)根據(jù)路由表生成輔助類(lèi)管理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間完成類(lèi)似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