Android-頁面路由Route

Why?

  • Route(路由)眾所周知是網(wǎng)絡(luò)中的名次,具體來說是指IP層協(xié)議的內(nèi)容,路由協(xié)議主要有OSPF、RIPS、BGP,那么Android里的Route指的是什么呢?
  • Android里的Route也如同IP層的Route一樣,作用類似尋址,但是尋的“址”并不是IP地址,而是頁面,試想以下場景:
    • 實(shí)際開發(fā)中某個點(diǎn)擊事件要求跳轉(zhuǎn)某個頁面,但是在開發(fā)過程中并不能確定是要跳轉(zhuǎn)到Activity A or B or C, 如果PM突然改變了跳轉(zhuǎn)邏輯,按照最傳統(tǒng)的方法我們只能修改代碼發(fā)布新的apk,或者先進(jìn)一點(diǎn)吧,采用熱修復(fù),但是無論怎么樣其實(shí)都只是修改一個跳轉(zhuǎn)的目標(biāo)Activity罷了,都要讓用戶機(jī)器上的重新編譯相關(guān)代碼,而其實(shí)變化的只是半行代碼。這點(diǎn)繁瑣&簡單工作都不應(yīng)該再交付給程序員,但是PM又不寫代碼,那應(yīng)該怎么樣才能完美解決這個問題呢?
  • Route則克服了相應(yīng)的缺點(diǎn):
    • Route在編碼階段,建立對應(yīng)的映射表/路由表,根據(jù)Server(后臺)提供的一個標(biāo)識符(Uri)來選擇已經(jīng)編寫好的頁面。這個頁面可以是我們最熟悉的Activity,也可以是承載在WebView上的H5(當(dāng)然,這兩句話是廢話)。
    • 對比傳統(tǒng)方式:優(yōu)勢不言而喻,無需重新提審,無需讓用戶Update
    • 對比熱修復(fù):熱修復(fù)也無需用戶顯示Update,對用戶是隱式的,也是利用Server進(jìn)行動態(tài)更新,但是熱修復(fù)到手機(jī)上還是要進(jìn)行代碼更新,即修改對應(yīng)的dex文件,而Route不需要更改dex,一方面熱修復(fù)的方式做了不必要的操作,是一種效率上的低下;另一方面,熱修復(fù)到底還是要編寫新代碼的,而Route只要修改Server發(fā)來的標(biāo)識符(Uri)即可,這樣的操作是可以不需要程序員的:
      • 只要響應(yīng)的前端開發(fā)者為PM寫好對應(yīng)的UI,讓他們選擇對應(yīng)的標(biāo)識符,就可以讓非技術(shù)人員修改頁面跳轉(zhuǎn)了

How?

  • 說起來很玄幻,但是其實(shí)實(shí)現(xiàn)起來并不難(但是第一個提出這種思想的人依舊很牛)

  • Route是通過Uri來確定目的跳轉(zhuǎn)頁面,Uri的格式是

    ? scheme: scheme-part

    scheme可以是自己定義的,比如說activity://testModule/testActivity,然后Route的框架通過解析這個Uri創(chuàng)建一個Intent(或者其他啟動信息類,比如用來使用H5頁面),啟動對應(yīng)的頁面,即有一個對應(yīng)的路由表用來映射Uri和對應(yīng)的頁面跳轉(zhuǎn)

  • 一個優(yōu)秀的Route框架應(yīng)該是可以自動收集每個頁面,建立Uri和UI的映射關(guān)系,生成路由表相應(yīng)表項(xiàng)(可以通過Annotations來幫助框架收集)

Conclusion

  • 要實(shí)現(xiàn)一個簡單的Router其實(shí)并不難,重要的是思想;但如果你想要實(shí)現(xiàn)一個優(yōu)雅的、接口靈活的Router,那工作量還是挺大的:比如說可能要借助注解,要利用Gradle插件自動匹配Uri和UI以生成路由表

Library

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

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

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