组件和模块间Activity路由框架,通过动态代理技术实现,轻量、灵活
特性
- 支持绝大多数参数类型(Intent可携带的数据类型)
- 专为组件和模块间Activity路由设计,组件化UI路由解耦
- 支持options(Android 5.0 启动Activity方式)
- 支持Context、Activity和Fragment作为调用者(Activity.startActivity()、Context.startActivity()和Fragment.startActivity())
- 支持设置request code(startActivityForResult())
- 提供拦截器(Interceptor),全局过滤Activity
- 支持安全启动Activity(未找到目标Activity时路由到默认的Activity)
- 可以得到Intent包装类Wrapper,然后可以自己作处理
- 支持Android 2.3及以上版本
不适用的场景
- H5跳native
- 其它应用跳本应用
使用
添加依赖
1 | dependencies { |
定义Router Service
首先要定义Router Service
,告诉框架如何来启动一个Activity,直接来看示例1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53public interface AFRouterService {
/**
* 以Activity类全名的方式来启动Activity
*/
"com.tubb.afrouter.sample.NormalActivity") // 类全名 (
void start();
/**
* 指定Action的方式来启动Activity
* @param action intent action
* @param reqCode startActivityForResult() request code
*/
void actionStart(@ParamKey("action") String action, @ParamKey("reqCode") int reqCode);
"com.tubb.afrouter.sample.NormalActivity") (
void forResult(@ParamKey("reqCode") int reqCode);
"com.tubb.afrouter.sample.BackStartActivity") (
void backStart();
/**
* 自己手动处理Activity的启动
* @return Intent Wrapper
*/
"com.tubb.afrouter.sample.NormalActivity") (
Wrapper returnTypeStart();
/**
* 携带options
* @param bundle 5.0 options
*/
"com.tubb.afrouter.sample.NormalActivity") (
void activityOptionsStart(@ParamKey("options") Bundle bundle);
/**
* 支持携带的参数类型
*/
"com.tubb.afrouter.sample.VerifyParamsActivity") (
void verifyParams(@ParamKey("strP") String strP, @ParamKey("strsP") String[] strsP,
@ParamKey("intP") int intP, @ParamKey("intsP") int[] intsP,
@ParamKey("shortP") short shortP, @ParamKey("shortsP") short[] shortsP,
@ParamKey("longP") long longP, @ParamKey("longsP") long[] longsP,
@ParamKey("charP") char charP, @ParamKey("charsP") char[] charsP,
@ParamKey("doubleP") double doubleP, @ParamKey("doublesP") double[] doublesP,
@ParamKey("floatP") float floatP, @ParamKey("floatsP") float[] floatsP,
@ParamKey("byteP") byte byteP, @ParamKey("bytesP") byte[] bytesP,
@ParamKey("booleanP") boolean booleanP, @ParamKey("booleansP") boolean[] booleansP,
@ParamKey("bundleP") Bundle bundleP,
@ParamKey("sparseArrayP") SparseArray<ParcelableEntity> sparseArrayP,
@ParamKey("arrayListIntP") ArrayList<Integer> arrayListIntP,
@ParamKey("arrayListStringP") ArrayList<String> arrayListStringP,
@ParamKey("arrayListCharSequenceP") ArrayList<CharSequence> arrayListCharSequenceP,
@ParamKey("arrayListParcelableP") ArrayList<ParcelableEntity> arrayListParcelableP,
@ParamKey("parcelableArrayP") ParcelableEntity[] parcelableArrayP,
@ParamKey("parcelableP") ParcelableEntity parcelableP,
@ParamKey("serializableP") SerializableEntity serializableP
);
}
快速使用
定义了Router Service
后,后面的调用流程将非常简单,一两行代码即可启动Activity1
2
3// Router Service可以保存在全局变量中
AFRouterService afService = AFRouter.getInstance().create(AFRouterService.class, this);
afService.forResult(FOR_RESULT_CODE);
通过Wrapper类使用
得到框架对Intent包装类Wrapper,然后由自己来处理1
2
3
4
5
6
7Wrapper wrapper = afService.returnTypeStart();
// wrapper.addFlags();
// wrapper.setAction();
// wrapper.setClassName();
// // 真实的Intent
// wrapper.getIntent();
wrapper.start();
拦截过滤
支持全局拦截,可以过滤掉一些Activity1
2
3
4
5
6
7
8afService = AFRouter.getInstance().create(AFRouterService.class, this, new Interceptor() {
public boolean intercept(Wrapper wrapper) {
Toast.makeText(wrapper.getContext(), "Interceptor return true", Toast.LENGTH_SHORT).show();
return true;
}
});
afService.backStart();
框架内置的几个参数
1 | "action" Intent Action 如果传了这个参数,`Intent.setAction()`将会被调用 |
配置默认Activity(找不到目标Activity时显示的Activity,避免APP崩溃)
1 | <meta-data |
混淆配置
1 | -keep class com.tubb.afrouter.annotations.** { *; } |
详细使用请参照GITHUB工程,强烈建议clone下来查看