之前專案裡使用阿里的頁面路由框架感覺挺不錯的,趁著有空跟大家分享一下。
一、為什麼需要路由框架
原生的路由方案存在的問題
首先談一談原生的路由方案存在的問題以及為什麼需要路由框架。我們所使用的原生路由方案一般是通過顯式intent和隱式intent兩種方式實現的,而在顯式intent的情況下,因為會存在直接的類依賴的問題,導致耦合非常嚴重;而在隱式intent情況下,則會出現規則集中式管理,導致協作變得非常困難。而且一般而言配置規則都是在manifest中的,這就導致了擴充套件性較差。除此之外,使用原生的路由方案會出現跳轉過程無法控制的問題,因為一旦使用了startactivity()就無法插手其中任何環節了,只能交給系統管理,這就導致了在跳轉失敗的情況下無法降級,而是會直接丟擲運營級的異常。
這時候如果考慮使用自定義的路由元件就可以解決以上的一些問題,比如通過url索引就可以解決類依賴的問題;通過分布式管理頁面配置可以解決隱式intent中集中式管理path的問題;自己實現整個路由過程也可以擁有良好的擴充套件性,還可以通過aop的方式解決跳轉過程無法控制的問題,與此同時也能夠提供非常靈活的降級方式。
為什麼要用路由元件
為了解決以上的問題就需要實現乙個自定義的路由框架,而路由框架一般都具有以下的三種特點:
分發:把乙個url或者請求按照一定的規則分配給乙個服務或者頁面來處理,這個流程就是分發,分發是路由框架最基本的功能,當然也可以理解成為簡單的跳轉。
管理:將元件和頁面按照一定的規則管理起來,在分發的時候提供搜尋、載入、修改等操作,這部分就是管理,也是路由框架的基礎,上層功能都是建立在管理之上。
控制:就像路由器一樣,路由的過程中,會有限速、遮蔽等一些控制操作,路由框架也需要在路由的過程中,對路由操作做一些定製性的擴充套件,比方剛才提到的aop,後期的功能更新,也是圍繞這個部分來做的。
以上文字都是copy,出處是
arouter的專案位址是:
整合如下
[html]view plain
copy
//阿里路由
host和scheme可以隨便改.
[html]view plain
copy
public class schamefilteractivity extends activity
}
[html]view plain
copy
arouter.openlog(); // 列印日誌
arouter.opendebug(); // 開啟除錯模式(如果在instantrun模式下執行,必須開啟除錯模式!線上版本需要關閉,否則有安全風險)
然後建乙個類對路由統一管理
[html]view plain
copy
public class routerule
return mrouterule;
} /**
* 路由位址
* 開啟主介面
*/
public void openmainactivity()
/**
* 路由位址
* 開啟資訊介面
* @param position 主頁的6個分類
*/
public void openinformation(int position)
/**
* 路由位址
* 開啟個人中心介面
*/
public void openusercenteractivity()
/**
* 路由位址
*/
public void openwxloginactivity()
/**
* 開啟詳情頁
* @param url
* @param title
*/
public void openwebactivity(string url,string title)
}
在要跳轉的類裡面配置,如果要接收引數,加上
[html]view plain
copy
arouter.getinstance().inject(this);
無引數跳轉不用加,如圖
嗯,具體文件可以看阿里的github。
Android平台阿里頁面路由ARouter
一 為什麼需要路由框架 原生的路由方案存在的問題 首先談一談原生的路由方案存在的問題以及為什麼需要路由框架。我們所使用的原生路由方案一般是通過顯式intent和隱式intent兩種方式實現的,而在顯式intent的情況下,因為會存在直接的類依賴的問題,導致耦合非常嚴重 而在隱式intent情況下,則...
Vue 頁面路由
首先,以在vscode搭建的專案為例,會看到以下目錄 根據路徑src router index.js,找到增加頁面路由的index.js檔案,對應下圖中的寫法進行路由設定 import vue from vue import router from vue router import hellowo...
Android 策略路由
策略路由主要routecontroller.cpp 路由優先順序 const uint32 t rule priority vpn override system 10000 const uint32 t rule priority vpn output to local 11000 const u...