AntCaves
github地址
Android Router 框架步势,取名為AntCaves窘茁,中文名”蟻穴“。
.jpg)
關于名字的一個故事
說起名字的由來壁涎,得從大四那年在武漢學車的時候凡恍。記得是學科目二的時候一個下午,在學車地方看到了一個螞蟻窩怔球。雖然小時候經辰涝停看到螞蟻窩,
但是經過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