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

AntCaves

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

關(guān)于名字的一個故事

說起名字的由來,得從大四那年在武漢學車的時候。記得是學科目二的時候一個下午,在學車地方看到了一個螞蟻窩。雖然小時候經(jīng)??吹轿浵伕C,
但是經(jīng)過4年計算機技術(shù)體系的學習,對軟件架構(gòu)有了一定的認知。于是對螞蟻窩的建筑架構(gòu)有了一定的興趣,當時把一個螞蟻洞口堵住,完全不影響其他洞口的工作。
不得不佩服,螞蟻間的工作車間的解藕,分工明確。道路四通八達,互不影響,他們的架構(gòu)思維遠遠超過大多數(shù)軟件研發(fā)。于是當時就跟同學說蟻穴的架構(gòu)思想。
工作契機,于是正好有機會實現(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>
關(guān)于path,必須遵循h(huán)ttp url形式。如:module://activity/about
關(guān)于參數(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.最常見的跳轉(zhuǎn)方式

<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.支持跳轉(zhuǎn)事件回調(diào)

通過跳轉(zhuǎn)事件回調(diào),得知是否跳轉(zhuǎn)成功/失敗/被攔截
<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跳轉(zhuǎn)方式

<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神的技術(shù)和精神支持。

聯(lián)系:

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

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

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

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

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