一个轻量简易的Android路由框架

AntCaves

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

关于名字的一个故事

说起名字的由来,得从大四那年在武汉学车的时候。记得是学科目二的时候一个下午,在学车地方看到了一个蚂蚁窝。虽然小时候经常看到蚂蚁窝,
但是经过4年计算机技术体系的学习,对软件架构有了一定的认知。于是对蚂蚁窝的建筑架构有了一定的兴趣,当时把一个蚂蚁洞口堵住,完全不影响其他洞口的工作。
不得不佩服,蚂蚁间的工作车间的解藕,分工明确。道路四通八达,互不影响,他们的架构思维远远超过大多数软件研发。于是当时就跟同学说蚁穴的架构思想。
工作契机,于是正好有机会实现这一想法。
题外话,佩服的动物莫过于蚂蚁,最佩服的人莫过于唐朝郭子仪。

如何导入?

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,必须遵循http url形式。如:module://activity/about
关于参数param,必须遵循key->type(基本数据类型+String)的形式进行规范。如: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>

注解 参数 请求
@Router(path="activity/about") 无参数 module://activity/about
@Router(path="activity/about",param="id->int") 1个参数 module://activity/about?id=123
@Router(path="activity/about",param={"id->int","name->String"}) 多个参数 module://activity/about?id=123&name=ant

step2:代码的方式添加
<pre>(无参数)
AntCavesRouter.addRouter("module://activity/about",Activity.class)
</pre>
<pre>(有参数)
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>

迭代优化

1.暂时不支持跨进程
2.日志打印优化
3.代码规范优化

感谢

感谢ActivityRouter作者曹神,ARouter作者Alex,Sixgod六神,Camel神的技术和精神支持。

联系:

个人邮箱:thisuper@163.com
加群沟通:284430347

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,726评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,626评论 18 139
  • 什么是UDP:UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组...
    a微风掠过阅读 351评论 0 0
  • 现在想来,觉得弟弟小时候可以算得上一个奇人。只不过随着年龄的增长,困扰越来越多,挫败越来越多,渐渐地消磨干净了。 ...
    liyongthethird阅读 368评论 0 0
  • 今天上午终于狠了狠心对衣柜做了一次大清理,把许多衣服都丢掉了,一直都不舍得丢,又不喜欢再穿,于是在衣柜里越攒越多,...
    萵是秀秀阅读 254评论 0 0