@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_2);
}
}
这样就可以支持多模块使用了。
自定义注入 router
Router.getInstance().add(“activity/three”, ThreeActivity.class);
跳转的时候调用
Router.getInstance().build(“activity/three”).navigation(this);
结果回调
路由跳转结果回调。
Router.getInstance().build(“my/activity/main”, new RouterCallback() {
@Override
public boolean beforeOpen(Context context, Uri uri) {
// 在打开路由之前
Log.i(TAG, “beforeOpen: uri=” + uri);
return false;
}
// 在打开路由之后(即打开路由成功之后会回调)
@Override
public void afterOpen(Context context, Uri uri) {
Log.i(TAG, “afterOpen: uri=” + uri);
}
// 没有找到改 uri
@Override
public void notFind(Context context, Uri uri) {
Log.i(TAG, “notFind: uri=” + uri);
}
// 发生错误
@Override
public void error(Context context, Uri uri, Throwable e) {
Log.i(TAG, “error: uri=” + uri + “;e=” + e);
}
}).navigation(this);
startActivityForResult 跳转结果回调
Router.getInstance().build(“activity/two”).navigation(this, new Callback() {
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i(TAG, “onActivityResult: requestCode=” + requestCode + “;resultCode=” + resultCode + “;data=” + data);
}
});
原理说明
实现一个 Router 框架,涉及到的主要的知识点如下:
- 注解的处理
- 怎样解决多个 module 之间的依赖问题,以及如何支持多 module 使用
- router 跳转及 activty startActivityForResult 的处理
我们带着这三个问题,一起来探索一下。
总共分为四个部分,router-annotion, router-compiler,router-api,stub
router-annotion 主要是定义注解的,用来存放注解文件
router-compiler 主要是用来处理注解的,自动帮我们生成代码
router-api 是对外的 api,用来处理跳转的。
stub 这个是存放一些空的 java 文件,提前占坑。不会打包进 jar。
router-annotion
主要定义了三个注解
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.CLASS)
public @interface Route {
String path();
}
@Retention(RetentionPolicy.CLASS)
public