在Android開發(fā)中,最常見也是最常用的功能就是頁面的跳轉(zhuǎn),我們經(jīng)常需要面對(duì)從瀏覽器或者其他App跳轉(zhuǎn)到自己App中頁面的需求,不過就算是簡簡單單的頁面跳轉(zhuǎn),隨著時(shí)間的推移,也會(huì)遇到一些問題:
(1)集中式的URL管理:談到集中式的管理,總是比較蛋疼,多人協(xié)同開發(fā)的時(shí)候,大家都去AndroidManifest.xml中定義各種IntentFilter,使用隱式Intent,最終發(fā)現(xiàn)AndroidManifest.xml中充斥著各種Schame,各種Path,需要經(jīng)常解決Path重疊覆蓋、過多的Activity被導(dǎo)出,引發(fā)安全風(fēng)險(xiǎn)等問題
(2)可配置性較差:Manifest限制于xml格式,書寫麻煩,配置復(fù)雜,可以自定義的東西也較少
(3)跳轉(zhuǎn)過程中無法插手:直接通過Intent的方式跳轉(zhuǎn),跳轉(zhuǎn)過程開發(fā)者無法干預(yù),一些面向切面的事情難以實(shí)施,比方說登錄、埋點(diǎn)這種非常通用的邏輯,在每個(gè)子頁面中判斷又很不合理,畢竟activity已經(jīng)實(shí)例化了
(4)跨模塊無法顯式依賴:在App小有規(guī)模的時(shí)候,我們會(huì)對(duì)App做水平拆分,按照業(yè)務(wù)拆分成多個(gè)子模塊,之間完全解耦,通過打包流程控制App功能,這樣方便應(yīng)對(duì)大團(tuán)隊(duì)多人協(xié)作,互相邏輯不干擾,這時(shí)候只能依賴隱式Intent跳轉(zhuǎn),書寫麻煩,成功與否難以控制。
為了解決以上問題,我們需要一款能夠解耦、簡單、功能多、定制性較強(qiáng)、支持?jǐn)r截邏輯的路由組件:我們選擇了Alibaba的ARouter,ARouter是阿里巴巴開源出來的一款Android路由框架。
功能介紹
1.添加依賴和注解
apply plugin: 'com.neenbedankt.android-apt'
2.添加注解
// 在支持路由的頁面、服務(wù)上添加注解(必選)
// 這是最小化配置,后面有詳細(xì)配置
@Route(path ="/test/1")
public class YourActivity extend Activity{? ? ... }
3.初始化SDK
ARouter.init(mApplication);// 盡可能早,推薦在Application中初始化
4.發(fā)起路由操作
// 1. 應(yīng)用內(nèi)簡單的跳轉(zhuǎn)(通過URL跳轉(zhuǎn)在'中階使用'中)
ARouter.getInstance().build("/test/1").navigation();
// 2. 跳轉(zhuǎn)并攜帶參數(shù)
ARouter.getInstance().build("/test/1")
.withLong("key1",666L)
.withString("key3","888")
.navigation();
5.通過URL跳轉(zhuǎn)
// 新建一個(gè)Activity用于監(jiān)聽Schame事件
// 監(jiān)聽到Schame事件之后直接傳遞給ARouter即可
// 也可以做一些自定義玩法,比方說改改URL之類的
// http://www.example.com/test/1
public classSchameFilterActivityextendsActivity {
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 外面用戶點(diǎn)擊的URL
Uri uri = getIntent().getData();
// 直接傳遞給ARouter即可
ARouter.getInstance().build(uri).navigation();
finish();
}
}
6.