[Android]如何做一個崩潰率少于千分之三噶應(yīng)用app(22)-組件化路由跳轉(zhuǎn)

大家好纽竣,我是蒼王品抽。以下是我這個系列的相關(guān)文章储笑,有興趣可以參考一下,可以給個喜歡或者關(guān)注我的文章圆恤。

[Android]如何做一個崩潰率少于千分之三噶應(yīng)用app--章節(jié)列表


大家應(yīng)該有看完我的第十二編簡書的頁面跳轉(zhuǎn)會清楚跨module的跳轉(zhuǎn)用Android原生來做是突倍,需要使用隱式跳轉(zhuǎn)完成。

但是原生跳轉(zhuǎn)方式是有很多的局限性的盆昙。這里借用ARouter 對跳轉(zhuǎn)的分析的一張圖來介紹一下羽历,這個圖可以很容易的反映出原生跳轉(zhuǎn)和路由跳轉(zhuǎn)的差異。

(1)顯示跳轉(zhuǎn)需要依賴于類淡喜,而路由跳轉(zhuǎn)是通過url索引秕磷,無需依賴

(2)隱式是通過AndroidMainfest集中管理,協(xié)作開發(fā)困難炼团,

(3)原生需要在AndroidMainfest里面注冊澎嚣,而路由是用注解來注冊

(4)原生只要啟動了startActivity就交由Android控制,而路由是使用AOP切面編程可以作控制

這樣對比瘟芝,可以很明顯的體現(xiàn)出路由跳轉(zhuǎn)的方面和非常適合組件化解耦易桃。

接下來我會對比下我所知道的兩款有口碑的路由框架ARouter和ActivityRouter。


一.ARouter的配置介紹

大家有聽說過大名鼎鼎的ARouter路由框架锌俱,這是有阿里出品的開源路由框架颈抚。今天配置了一下,感覺真的不少坑。

這里我以我的組件化Gank工程給大家演示一下贩汉,覺得有用歡迎給個star

(1)首先我們需要在base module里面添加一些配置

compile引用aouter-api庫驱富,

annotationProcessor是AOP注解需要的

然后annotaitonProcessor會使用javaCompileOptions這個配置來獲取當(dāng)前module的名字

這里還比較奇異的地方時,其他使用了ARouter的路由跳轉(zhuǎn)的module(只要聲明了Route注解的module)都需要配置紅框的兩個地方匹舞,不然會無法跳轉(zhuǎn)成功褐鸥。

當(dāng)然我們還需要將加Application初始化

這里通過BuildConfig來區(qū)分打Log的情況,還需要使用ARouter.init()初始化

然后以web模塊為例

我們的WebActivity需要添加注解Route赐稽,path是跳轉(zhuǎn)的路徑

然后通過ARouter的引用調(diào)用叫榕,build填的是地址,withXXX填的是參數(shù)的key和value姊舵,然后navigation就是發(fā)射了路由跳轉(zhuǎn)了晰绎。

這里用的是建造者模式。

然后webActivity通過讀取傳遞的intent的方式就可以獲取參數(shù)了括丁。

以為這樣就完了荞下,這里是我收集到ARouter踩到的坑,這里才是精華史飞。

(1)請一定要保證每個需要跳轉(zhuǎn)的module都需要加入尖昏,不然跨模塊跳轉(zhuǎn)不起來

會報(bào)出這樣的log

(2)這里ARouter是對v4包是有依賴的,而且其包必定是要在25.2.0以上(我當(dāng)前看的源碼是需要這個构资,以后是否有更改抽诉,就需要大家查詢了),這里需要感謝討論群里的“98度”同學(xué)的提醒

(3)接下來吐绵,才是巨坑迹淌,這里面多個相同的group出現(xiàn),就會提示出現(xiàn)

查了一下Route里面的代碼,發(fā)現(xiàn)有以下這么一行己单,說明他是以group劃分了唉窃,group名不應(yīng)該相同。

這里group名就是path = “/XXX/XX“里面的第一個XXX了荷鼠,每個module的group名都不應(yīng)該相同。

如果遇到什么坑榔幸,也可以在評論或者加我討論群告訴一下大家允乐。

****2017.5.19****

發(fā)現(xiàn)了在Window電腦中編譯無問題,在mac中編譯就跳轉(zhuǎn)不過過去削咆。

遇到了一些大坑牍疏,因?yàn)镸ac在Application中使用了BuildConfig結(jié)果無法正常調(diào)用。

只要注釋了這里就能正常通過拨齐。鳞陨。。

****2017.7.20****

感謝QQ群內(nèi)的澆草少年發(fā)現(xiàn)的ARouter使用問題,

當(dāng)使用retrolambda需要引用plugin厦滤,這樣的順序是有問題的援岩。

需要調(diào)整一下retrolamda的順序。很可能兩個都從寫了apt里面的方式掏导,有什么潛在問題享怀,之后有待考究。但是澆草少年暫時未遇到問題趟咆。


一.ActivityRouter的配置介紹

首先ActivityRouter比ARouter要先發(fā)布很多添瓷。但是配置比起ARouter要麻煩很多,顯得相當(dāng)不友好值纱。

其配置方式有兩種鳞贷。

第一種方式是和ARouter一樣,都是每個Module里面都要配annotaionProcessor

使用apt方式虐唠,你可能遇到以下的錯誤搀愧,RouterMapping一直找不到相應(yīng)的對象。

然后每個Module中的需要路由跳轉(zhuǎn)的Activity都需要配置這個scheme

每個Module都需要配一個空的引用類和Module注解

其Application需要配置Modules注解凿滤,包含注冊的module對應(yīng)的字符串

然后在對應(yīng)的需要路由跳轉(zhuǎn)的Activity跳轉(zhuǎn)地址

簡單的跳轉(zhuǎn)調(diào)用Routers.open方法妈橄,調(diào)用scheme:data + module activity對應(yīng)跳轉(zhuǎn)地址

這樣就能跳轉(zhuǎn)成功了。

至于踩到什么坑

(1)申明地址的時候翁脆,地址開頭不能帶有“ /”眷蚓,因?yàn)樘D(zhuǎn)的時候聲明scheme data里面其跳轉(zhuǎn)地址如果加上“/”開頭,將會帶有多/(如cangwang:///main),為了規(guī)避解析異常反番。

(2)跳轉(zhuǎn)參數(shù)有兩種方式沙热,可以看ActivityRouter的例子里面,一種是通過地址包含參數(shù)

另一種是通過聲明參數(shù)的類型來做

這里比較坑的地方時罢缸,如果需要帶參數(shù)篙贸,需要以“?”+參數(shù)名+“=”+參數(shù)值 ?的方式傳遞

下面是例子

第一種方式

這里第一個值desc直接傳遞到title這個key里面

第二種方式傳遞

其參數(shù)名只需要寫到對應(yīng)的xxxParams里面枫疆。

跳轉(zhuǎn)啟動

(3)如果你考慮傳遞網(wǎng)址或者文件目錄這些參數(shù)爵川,你是無法使用第一種方式傳遞的,只能選擇第二種方式息楔。

因?yàn)槠錈o法通過第一種方式解析出跳轉(zhuǎn)的地址寝贡。

通過第二種方式傳遞,其能通過=來匹配傳遞內(nèi)容值依。

而跳轉(zhuǎn)失敗是不會有l(wèi)og提示的圃泡,只能調(diào)試其源碼才能看出來,排查過程真心有點(diǎn)累愿险。


對比來看ActivityRouter配置靈活性比不上ARouter颇蜡,ARouter參數(shù)傳遞更加簡便。如果選型來說,還是選擇后者风秤。

我會在之后的章節(jié)給大家剖析ARouter的原理鳖目。

如果有不同的看法和建議,也可以留言給我唁情,或者加我群疑苔,大家一起討論。


總結(jié)

使用路由的初衷是因?yàn)榭紤]到以后網(wǎng)絡(luò)跳轉(zhuǎn)到原生頁面甸鸟,需要更好的解耦方式惦费,也防止AndroidMainfest管理復(fù)雜化問題。

考慮踩過的坑抢韭,還是發(fā)現(xiàn)有一些缺陷的地方薪贫。

1.無法像Android使用startActivies啟動多個intent

2.配置和侵入性,每個module都需要使用注解框架刻恭。

3.如果考慮到以后應(yīng)用會sdk化瞧省,因?yàn)槠浒⒔饪蚣埽枰J(rèn)真考慮是否值得使用路由框架鳍贾。


這一節(jié)介紹就到這里鞍匾,

下一節(jié)將會更精彩,敬請期待F锟啤O鹗纭!

群號是316556016咆爽,也可以掃碼進(jìn)群梁棠。我在這里期待你們的加入!6饭 符糊!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市呛凶,隨后出現(xiàn)的幾起案子男娄,更是在濱河造成了極大的恐慌,老刑警劉巖漾稀,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件模闲,死亡現(xiàn)場離奇詭異,居然都是意外死亡县好,警方通過查閱死者的電腦和手機(jī)围橡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門暖混,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缕贡,“玉大人,你說我怎么就攤上這事×肋洌” “怎么了收擦?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谍倦。 經(jīng)常有香客問我塞赂,道長,這世上最難降的妖魔是什么昼蛀? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任宴猾,我火速辦了婚禮,結(jié)果婚禮上叼旋,老公的妹妹穿的比我還像新娘仇哆。我一直安慰自己责鳍,他們只是感情好蟀俊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布猿推。 她就那樣靜靜地躺著熙侍,像睡著了一般鸠天。 火紅的嫁衣襯著肌膚如雪鼠证。 梳的紋絲不亂的頭發(fā)上饮睬,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天铡原,我揣著相機(jī)與錄音沈跨,去河邊找鬼由捎。 笑死,一個胖子當(dāng)著我的面吹牛谒出,可吹牛的內(nèi)容都是我干的隅俘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼笤喳,長吁一口氣:“原來是場噩夢啊……” “哼为居!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起杀狡,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤蒙畴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后呜象,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膳凝,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年恭陡,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹬音。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡休玩,死狀恐怖著淆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情永部,我是刑警寧澤独泞,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站苔埋,受9級特大地震影響懦砂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜组橄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一荞膘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玉工,春花似錦衫画、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至费奸,卻和暖如春弥激,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背愿阐。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工微服, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缨历。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓以蕴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辛孵。 傳聞我的和親對象是個殘疾皇子丛肮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容