ARouter(一):简介

前言

在应用开发中,原生app经常内嵌Web,节省开发的成本,这种情况我们通过注入JS脚本来解决原生和Web的通信问题。那么相反,在浏览器环境中,Web又如何启动App呢?这就是深度链接的出现的原因。

深度链接看着是一个很6的名字,实际上就是隐式启动的一种,所以说有文化就是不一样。隐式启动最大的优势在于不明确指定启动页面的名字,通过各种过滤参数,找到符合条件页面,对匹配的过程解耦,堪称路由模式的鼻祖。

我们谈谈什么是路由模式?
以生活中路由器为例,首先路由器连接可以访问网络的总线,我们通过网线或wifi连接路由器,当我们需要访问网络的时候,路由器帮助我们进行请求转发,访问网络有两种情况:
1、例如看视频,聊天等等,访问的是总线;
2、如果我们要打局域网游戏,就要访问连接同一路由的其他设备;

那么把这种设计理念放入到程序设计中:

总线 相当于主工程
设备 相当于独立模块

路由模式原型图

再说说程序设计模块化的几大好处:

1、便于多人协作开发,尽量避免多人操作同一文件,减少合并代码的引发的问题。
2、便于测试,减少打包测试的时间
3、便于维护,修改某一功能尽可能小的影响其他模块。

模块化有这么多的好处,但同时出现了一个更大的问题:

模块之间如何进行交互?

例如,用户登录和评论两个独立模块,评论之前需要判断是否已登录,否则要跳转到登录页面去,评论模块无法直接访问用户模块的类,所以无法正常编译运行,为了解决这个问题,我们需要借助路由模式。

OK,基本知识我们已经都了解了,接下来我们学习一下ARouter的用法,看看他怎么把路由和深度链接结合起来的。

正文

ARouter路由github地址

首先推荐大家看一下ARouter在github上的教程,英文版和中文版都有,可以说是非常良心了,这里我们挑几个重点介绍一下。

@Router注解

服务注解,用于Activity,Fragment,以及自定义服务接口等等。

@Router注解的类,代表可以被路由的服务,例如跳转页面,启动服务,或者开放服务,例如之前举例的登录,就可以写一个LoginService,然后通过路由地址就可以找到这个服务。

// 跳转页面
@Route(path = "/main/TestActivity", extras = 1)
public class TestActivity extends AppCompatActivity{}
ARouter.getInstance().build("/main/TestActivity").navigation();

// 通过路由找到Fragment
@Route(path = "/test/fragment", extras = 1)
public class Fragment1 extends Fragment{}
Fragment fragment = (Fragment) ARouter.getInstance().build("/test/fragment").navigation();

// 通过路由找到开放的服务
@Route(path = "/service/sayHello")
public class HelloServiceImpl implements HelloService{}
HelloService service4 = (HelloService)ARouter.getInstance().build("/service/sayHello").navigation();

@Interceptor注解

全局拦截器注解,会在编译过程中自动装配到ARouter配置中,无需手动设置

拦截器会在路由过程中被执行,一旦某一个拦截器拦截,此次路由停止。如果跳转的过程想要跳过拦截器,可以设置greenChannel():

// greenChannel()表示跳过拦截器
ARouter.getInstance().build("/main/TestActivity").greenChannel().navigation();

@Autowired注解

自动装配注解,自动装配符合要求的值,例如从intent中或者通过路由创建对应的对象。

ARouter.getInstance()
       .build("/kotlin/test")
       .withString("name", "老王")
       .withInt("age", 23)
       .navigation();

// 自动装配,desc属性表示的描述,没有实际作用
@Autowired(desc = "姓名")
String name = "jack";

@Autowired
int age = 10;

// 自动装配符合条件的服务
// 如果有多个实现类,请设置路由地址
// @Autowired(name = "/service/sayHello")
@Autowired
HelloService helloService;

SchemeFilterActivity的使用

深度链接过度页面,用于处理从浏览器跳转的参数,然后通过路由找到对应的服务。

<activity android:name=".activity.SchameFilterActivity">
    <!-- Schame -->
    <intent-filter>
        <data
            android:host="m.aliyun.com"
            android:scheme="arouter"/>

        <action android:name="android.intent.action.VIEW"/>

        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
    </intent-filter>
</activity>

public class SchemeFilterActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_schame_filter);

        Uri uri = getIntent().getData();
        ARouter.getInstance().build(uri).navigation();
        finish();
    }
}

总结

这一篇主要是了解一些路由和深度链接相关的知识,然后了解一下ARouter的用法,为之后的源码分析和实战打下基础。

摘自:Android:从零开始打造自己的深度链接库(一):ARouter简介

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值