一個輕量簡易的Android路由框架

AntCaves

github地址
Android Router 框架步势,取名為AntCaves窘茁,中文名”蟻穴“。

關于名字的一個故事

說起名字的由來壁涎,得從大四那年在武漢學車的時候凡恍。記得是學科目二的時候一個下午,在學車地方看到了一個螞蟻窩怔球。雖然小時候經辰涝停看到螞蟻窩,
但是經過4年計算機技術體系的學習竟坛,對軟件架構有了一定的認知闽巩。于是對螞蟻窩的建筑架構有了一定的興趣,當時把一個螞蟻洞口堵住担汤,完全不影響其他洞口的工作涎跨。
不得不佩服,螞蟻間的工作車間的解藕漫试,分工明確六敬。道路四通八達,互不影響,他們的架構思維遠遠超過大多數(shù)軟件研發(fā)驾荣。于是當時就跟同學說蟻穴的架構思想外构。
工作契機普泡,于是正好有機會實現(xiàn)這一想法。
題外話审编,佩服的動物莫過于螞蟻撼班,最佩服的人莫過于唐朝郭子儀。

如何導入垒酬?

step1:在project build.gradle 文件中添加如下倉庫
<pre>
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }
}
}
</pre>
step2:在項目module中build.gradle 添加如下引用(如果是多module 的情況下砰嘁,在不同的module下同樣添加以下引入)
<pre>
compile 'com.github.themores.AntCaves:antcaves:lastVersion'
compile 'com.github.themores.AntCaves:annotation:lastVersion'
</pre>
其中最新版本lastVersion = 1.0.8

如何使用?

1.初始化

<pre>
1.注冊module
在module中勘究,常見為app_module,在Application類或者新建一個類矮湘,添加注解。
@Modules(module = "app")
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
}
}
同時在主module 上的任意一個activity 上添加改注解module 的名字
@Router(module = "app", path = "activity/about")
2.build項目
3.重寫Application類口糕,在其onCreate()方法中初始化缅阳,添加<code>AntCavesSDK.init();</code>
</pre>

2.說明

<pre>
關于path,必須遵循h(huán)ttp url形式。如:module://activity/about
關于參數(shù)param,必須遵循key->type(基本數(shù)據(jù)類型+String)的形式進行規(guī)范景描。如:id->int,name->String,isClose->boolean
</pre>

3.多種方式添加path

step1:注解的方式添加
<pre>
@Router(path = "activity/about", param = {"id->int", "name->String"})
public class AboutActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toast.makeText(this, getIntent().getStringExtra("name") + "", Toast.LENGTH_LONG).show();
Toast.makeText(this, getIntent().geIntExtra("id", 0) + "", Toast.LENGTH_LONG).show();
}
}
</pre>

注解 參數(shù) 請求
@Router(path="activity/about") 無參數(shù) module://activity/about
@Router(path="activity/about",param="id->int") 1個參數(shù) module://activity/about?id=123
@Router(path="activity/about",param={"id->int","name->String"}) 多個參數(shù) module://activity/about?id=123&name=ant

step2:代碼的方式添加
<pre>(無參數(shù))
AntCavesRouter.addRouter("module://activity/about",Activity.class)
</pre>
<pre>(有參數(shù))
List<String> paramList = Arrays.asList("id->int","name->String");
AntCavesRouter.addRouter("module://activity/about",paramList,Activity.class);
</pre>

4.最常見的跳轉方式

<pre>AntCavesRouter.getInstance().prepare(Activity.this, path).go();</pre>

5.支持傳遞Object序列化

User:
<pre>
public class User implements Serializable {
private int id;
private String name;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}
</pre>
<pre>
A->B
A:
User user = new User();
user.setId(10086);
user.setName("this is a object");
AntCavesRouter.getInstance().prepare(Activity.this, path).equipExtra("user", user).go();

B:
User user = (User) getIntent().getSerializableExtra("user");
</pre>

6.支持跳轉事件回調

通過跳轉事件回調十办,得知是否跳轉成功/失敗/被攔截
<pre>
AntCavesRouter.getInstance().prepare(Activity.this, path).go(new IAntCallBack() {
@Override
public void onLost(Context context, String message) {
}

        @Override
        public void onArrival(Context context, String message) {

        }

        @Override
        public void onInterceptor(Context context, String message) {

        }
    });

</pre>

7.支持startActivityForResult和setResult跳轉方式

<pre>
A->B->A
A->B: int requestCode = 1;
AntCavesRouter.getInstance().prepare(this, "activity://aba").go(requestCode);

B->A: setResult(RESULT_OK,intent);

A:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//from B
}
</pre>

8.支持添加攔截處理

自定義添加攔截器 CustomInterceptor extends Interceptor
<pre>
public class CustomInterceptor extends Interceptor {
@Override
public void process(Context context, String path, IInterceptorCallBack iInterceptorCallBack) {
//do something: show Dialog,intent to another Activity etc.
}
}
</pre>
添加攔截器
<pre>
AntCavesRouter.getInstance().prepare(Activity.this, path).addInterceptor(new CustomInterceptor()).go();
</pre>

9.支持多module方式

1.注冊多module
<pre>在主module中,常見為app_module,在Application類或者新建一個類超棺,添加注解向族。
@Modules(module = {"app", "demo"})
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
}
}
</pre>
同時在主module 上的任意一個activity 上添加改注解module 的名字
<pre>
@Router(module = "app", path = "activity://aba")
</pre>
同樣在其他module 上的任意activity 上添加改注解module 的名字
<pre>
@Router(module = "demo", path = "activity/demo")
</pre>

混淆配置

<pre>
-dontwarn com.google.**
-dontwarn com.squareup.**
-dontwarn com.antcaves.**
</pre>

迭代優(yōu)化

1.暫時不支持跨進程
2.日志打印優(yōu)化
3.代碼規(guī)范優(yōu)化

感謝

感謝ActivityRouter作者曹神,ARouter作者Alex棠绘,Sixgod六神件相,Camel神的技術和精神支持。

聯(lián)系:

個人郵箱:thisuper@163.com
加群溝通:284430347

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末弄唧,一起剝皮案震驚了整個濱河市适肠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌候引,老刑警劉巖侯养,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異澄干,居然都是意外死亡逛揩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門麸俘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辩稽,“玉大人,你說我怎么就攤上這事从媚〕研梗” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長喷众。 經常有香客問我各谚,道長,這世上最難降的妖魔是什么到千? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任昌渤,我火速辦了婚禮,結果婚禮上憔四,老公的妹妹穿的比我還像新娘膀息。我一直安慰自己,他們只是感情好了赵,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布潜支。 她就那樣靜靜地躺著,像睡著了一般斟览。 火紅的嫁衣襯著肌膚如雪毁腿。 梳的紋絲不亂的頭發(fā)上辑奈,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天苛茂,我揣著相機與錄音,去河邊找鬼鸠窗。 笑死妓羊,一個胖子當著我的面吹牛,可吹牛的內容都是我干的稍计。 我是一名探鬼主播躁绸,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼臣嚣!你這毒婦竟也來了净刮?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤硅则,失蹤者是張志新(化名)和其女友劉穎淹父,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怎虫,經...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡暑认,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了大审。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蘸际。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖徒扶,靈堂內的尸體忽然破棺而出粮彤,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布导坟,位于F島的核電站缠诅,受9級特大地震影響,放射性物質發(fā)生泄漏乍迄。R本人自食惡果不足惜管引,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闯两。 院中可真熱鬧褥伴,春花似錦、人聲如沸漾狼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逊躁。三九已至似踱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稽煤,已是汗流浹背核芽。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留酵熙,地道東北人轧简。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像匾二,于是被迫代替她去往敵國和親哮独。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,297評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理察藐,服務發(fā)現(xiàn)皮璧,斷路器,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • 什么是UDP:UDP是一個簡單的面向數(shù)據(jù)報的運輸層協(xié)議:進程的每個輸出操作都正好產生一個UDP數(shù)據(jù)報分飞,并組...
    a微風掠過閱讀 355評論 0 0
  • 現(xiàn)在想來悴务,覺得弟弟小時候可以算得上一個奇人。只不過隨著年齡的增長浸须,困擾越來越多惨寿,挫敗越來越多,漸漸地消磨干凈了删窒。 ...
    liyongthethird閱讀 379評論 0 0
  • 今天上午終于狠了狠心對衣柜做了一次大清理裂垦,把許多衣服都丟掉了,一直都不舍得丟肌索,又不喜歡再穿蕉拢,于是在衣柜里越攢越多,...
    萵是秀秀閱讀 264評論 0 0