美文网首页
Android 小型路由 SimpleRouter

Android 小型路由 SimpleRouter

作者: Parallel_Lines | 来源:发表于2020-06-06 12:51 被阅读0次

闲来无事,利用 APT 写了个类似 ARouter 的小型路由框架,方便组件化跳转。

功能说明

基本路由跳转

路由跳转当然是 SimpleRouter 最基本的功能。

1、使用 SimpleRouter 注解标注路由名。

@SimpleRouter(value = "main_page", interceptor = "")
public class MainActivity extends AppCompatActivity {
    ...
}

@SimpleRouter(value = "home_page", interceptor = "")
public class HomeActivity extends AppCompatActivity {
    ...
}

2、使用 SRouter 类进行跳转。

@SimpleRouter(value = "main_page", interceptor = "")
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 示例路由跳转
        SRouter.build(this, "home_page").execute();
    }
}

综上就完成了 Activity 之间的跳转。

带参路由跳转

1、传递参数

SRouter.build(this, "home_page")
        .addParams("title", "This is title")
        .addParams("book", new Book("书名", 99.9))
        .execute();

2、解析参数

@SimpleRouter(value = "home_page", interceptor = "")
public class HomeActivity extends AppCompatActivity {

    @SimpleParam("title")
    String mTitle;

    @SimpleParam("book")
    Book mBook;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        SRouter.initParams(this);
    }
}

调用 @SimpleParam 注解指定要解析的参数, 调用 SRouter.initParams(this) 以解析参数。

该代码可以写在基类中,即使没有参数可解析也没影响。

路由监控和拦截

SimpleRouter 包含了简单的路由监控和拦截机制。

监控

SRouter.build(this, "home_page")
       .callback(new RouterCallback() {
            @Override
            public void onFound() {}

            @Override
            public void onLost() {}

            @Override
            public void onArrival() {}

            @Override
            public void onIntercept(Interceptor interceptor) {}
       })
       .execute();

它们触发的时机分别是:

onFound:找到路由,跳转前。
onLost:未找到路由。
onArrival:找到路由,跳转后。
onIntercept:找到路由,跳转被拦截后。

拦截

拦截支持俩种方式,分别是通用拦截器和临时拦截器。

通用拦截器

先说通用拦截器,这种拦截方式会在跳转到目标 Activity 之前,先执行其拦截器。因为任何 Activity 跳转至目标 Activity 都会先触发该拦截器,所以称为通用拦截器。

首先定义拦截器

...
import com.dixon.simple.router.guide.Interceptor;

public class HomeInterceptor implements Interceptor {
    @Override
    public boolean onIntercept(Context context) {
        // 示例代码 未登录则跳转登录页
        if (Constant.isLogin()) {
            return false;
        }
        SRouter.build(context, "login_page").execute();
        // true 表示拦截
        return true;
    }
}

然后给目标 Activity 关联该拦截器,interceptor 值为上述拦截器的全限定名。

@SimpleRouter(value = "home_page", interceptor = "com.dixon.comp.home.HomeInterceptor")
public class HomeActivity extends AppCompatActivity {
    ...
}

这样任意 Activity 跳转至 HomeActivity 前,都会触发 HomeInterceptor 的逻辑。

interceptor 可以为空字符串,找不到拦截器不会影响正常跳转。

临时拦截器

故名思义,只在本次跳转生效。使用方式如下:

SRouter.build(this, "home_page")
       .interceptor(new Interceptor() {
            @Override
            public boolean onIntercept(Context context) {
                // false 表示不拦截 your logic
                return false;
            }
       })
       .execute();

优先级上,临时拦截器 > 通用拦截器。

项目配置

要使用 SimpleRouter,需要如下配置:

1、在需要使用到 SimpleRoutermodulebuild.gradle 文件中,如下配置:

android {
    ...
    defaultConfig {
        ...
        // 配置 moduleName 用于生成特殊文件
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [moduleName: project.getName()]
            }
        }
    }
}

dependencies {
    ...
    implementation 'com.dixon.srouter:simple_router:1.0.1'
    annotationProcessor 'com.dixon.srouter:simple_router_processor:1.0.1'
}

2、在你的 Application 中完成初始化。

public class XXApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        SRouter.init(this);
    }
}

如上,配置完毕。

源码地址

源码及Demo Github

备注说明

很简单的小项目,没有复杂的功能,没有 ARouter 强大,小型项目可用,简单易上手。

如果有功能需要或提 bug,可以 Github 或者直接下边提需求,后续会逐步更新优化。

相关文章

  • Android 小型路由 SimpleRouter

    闲来无事,利用 APT 写了个类似 ARouter 的小型路由框架,方便组件化跳转。 功能说明 基本路由跳转 路由...

  • 组件化开发-简单的路由

    路由原理 动手写一个SimpleRouter,这个路由很简单主要是实现逻辑。1.所有的Activity都注册到路由...

  • Juniper - 概念介绍

    操作企业Juniper网络路由 Juniper网络企业路由 企业路由的定位 J系列路由器应用在小型企业M系列路由器...

  • Module 2 Module

    Android模块化开发小demo 内置Android路由, 支持注解设置路由 如果你只想使用内置的Android...

  • 【网络】小型企业网组网

    对于一个小型企业网络,需要的设备是路由、交换、无线、安全,常用的技术如下: 1.路由:静态路由、OSPF 2.交换...

  • Verizon BGP 路由泄漏导致多家大量服务受影响

    昨天,由于大型转运服务商 Verizon 错误转发了一则 BGP 路由广播,致使流量路由经过了一家小型 ISP,导...

  • Android组件化专题 - 路由框架进阶模块间的业务通信

    上一篇文章,讲解了路由框架实现的原理,并实现了基本的路由框架 页面路由的跳转Android组件化专题 - 路由框架...

  • 5 路由与导航

    路由与导航 路由管理 路由(Route)在移动开发中通常指页面(Page),在Android中通常指一个Activ...

  • RIP协议原理

    RIP协议适用于中小型网络,使用UDP进行路由信息的交互,端口号520。一种距离矢量路由协议,属于IGP协议。 自...

  • 理解Flutter中的路由管理

    路由的理解 移动端,前端中的路由指的是页面;例如: Android中activity, IOS中的ViewCont...

网友评论

      本文标题:Android 小型路由 SimpleRouter

      本文链接:https://www.haomeiwen.com/subject/lvlazhtx.html