- 简单demo,github做简单静态界面服务器,并部署到oslanka.github.io/statichtml.…
跳转登录android-ARouter
跳转登录android-ARouter 带参数
跳转android-ARouter 设置界面
跳转android-ARouter 设置界面
跳转android-ARouter 错误路径
-
拦截器(拦截跳转过程,面向切面编程)
-
什么是面向切面编程AOP?AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率
// 拦截器会在跳转之前执行,多个拦截器会按优先级顺序依次执行
@Interceptor(priority = 8, name = “测试用拦截器”)
public class TestInterceptor implements IInterceptor {
@Override
public void process(Postcard postcard, InterceptorCallback callback) {
…
callback.onContinue(postcard); // 处理完成,交还控制权
// callback.onInterrupt(new RuntimeException(“我觉得有点异常”)); // 觉得有问题,中断路由流程
// 以上两种至少需要调用其中一种,否则不会继续路由
}
@Override
public void init
(Context context) {
// 拦截器的初始化,会在sdk初始化的时候调用该方法,仅会调用一次
}
}
- 动态注册路由信息 适用于部分插件化架构的App以及需要动态注册路由信息的场景,可以通过 ARouter 提供的接口实现动态注册 路由信息,目标页面和服务可以不标注 @Route 注解,注意:同一批次仅允许相同 group 的路由信息注册
ARouter.getInstance().addRouteGroup(new IRouteGroup() {
@Override
public void loadInto(Map<String, RouteMeta> atlas) {
atlas.put("/dynamic/activity", // path
RouteMeta.build(
RouteType.ACTIVITY, // 路由信息
TestDynamicActivity.class, // 目标的 Class
“/dynamic/activity”, // Path
“dynamic”, // Group, 尽量保持和 path 的第一段相同
0, // 优先级,暂未使用
0 // Extra,用于给页面打标
)
);
}
});
// 构建标准的路由请求,并指定分组
ARouter.getInstance().build("/home/main", “ap”).navigation();
// 构建标准的路由请求,通过Uri直接解析
Uri uri;
ARouter.getInstance().build(uri).navigation();
// 构建标准的路由请求,startActivityForResult
// navigation的第一个参数必须是Activity,第二个参数则是RequestCode
ARouter.getInstance().build("/home/main", “ap”).navigation(this, 5);
// 指定Flag
ARouter.getInstance()
.build("/home/main")
.withFlags();
.navigation();
// 获取Fragment
Fragment fragment = (Fragment) ARouter.getInstance().build("/test/fragment").navigation();
// 对象传递
ARouter.getInstance()
.withObject(“key”, new TestObj(“Jack”, “Rose”))
.navigation();
// 使用绿色通道(跳过所有的拦截器)
ARouter.getInstance().build("/home/main").greenChannel().navigation();
- ARouter.init 时,通过获取
/data/app/包名/base.apk
来筛选出ARouter生成的类,如下图。
- 对于Activity类型,跳转
ARouter.getInstance().build("/login/login").navigation();
,最终执行的是,如下:
**
-
Start activity
-
@see ActivityCompat
*/
private void startActivity(int requestCode, Context currentContext, Intent intent, Postcard postcard, NavigationCallback callback) {
if (requestCode >= 0) { // Need start for result
if (currentContext instanceof Activity) {//启动context 为Activity
ActivityCompat.startActivityForResult((Activity) currentContext, intent, requestCode, postcard.getOptionsBundle());
} else {
// 启动context 为Application 时,不支持requestCode
logger.warning(Consts.TAG, “Must use [navigation(activity, …)] to support [startActivityForResult]”);
}
} else {//启动context 为Application
ActivityCompat.startActivity(cur