t; </p>
注意 a 标签里面的 arouter://zhaoyanjun 分别代表着 scheme 、host ;/com/URLActivity1 就是目标 Activity 的注解。
如果需要接收 URL 中的参数,需要在 Activity 调用自动注入初始化方法;
ARouter.getInstance().inject(this);
需要注意的是,如果不使用自动注入,那么可以不写 ARouter.getInstance().inject(this),但是需要取值的字段仍然需要标上 @Autowired 注解,因为 只有标上注解之后,ARouter才能知道以哪一种数据类型提取URL中的参数并放入Intent中,这样您才能在intent中获取到对应的参数
具体的代码如下:
@Route(path = "/com/URLActivity2") public class URLActivity2 extends AppCompatActivity{ private TextView textView; @Autowired String name; @Autowired int age; @Autowired boolean boy; @Autowired int high; @Autowired String obj ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ARouter.getInstance().inject(this); setContentView(R.layout.activity_url2); textView = (TextView) findViewById(R.id.tv);
效果图如下:
暴露服务
??这里说到的服务不是Android四大组件中的Service,这里的服务是接口开发的概念,就是将一部分功能和组件封装起来成为接口,以接口的形式对外提供能力,所以在这部分就可以将每个功能作为一个服务,而服务的实现就是具体的业务功能。
我们先自定义一个接口 IService 并且继承 IProvider 。IService 接口里面有一个 sayHello() 方法,具体代码如下。
public interface IService extends IProvider { void sayHello(Context context ); }
先定义一个 IService 的实现类 MyService 并且添加注解,代码如下
@Route(path = "/service/hello", name = "测试服务") public class MyService implements IService { @Override public void sayHello( Context context ) { Toast.makeText( context , "hello", Toast.LENGTH_SHORT).show(); } @Override public void init(Context context) { } }
发现服务,首先定义服务对象,并且添加注解,我们不需要知道接口的具体实现类。
@Autowired(name = "/service/hello") IService service;
然后添加注解初始化,自动赋值。
ARouter.getInstance().inject(this);
最后我们调用 service 里面的 sayHello() 方法。
service.sayHello(this);
发现服务这个功能的特点在于,我们只需要知道接口,不需要关心接口的实现类,很好了实现了解耦。
路由关闭
ARouter.getInstance().destroy();
温馨提示:该功能慎用,搞不好整个app页面跳转就gg了。
代码混淆
??如果我们使用了Proguard进行代码混淆,可以添加以下代码
-keep public class com.alibaba.android.arouter.routes.**{*;} -keep class * implements com.alibaba.android.arouter.facade.template.ISyringe{*;}
2.常见应用场景
- 从外部URL映射到内部页面,以及参数传递与解析
说明:该场景使用到了该文章的URL跳转和暴露服务功能,这样使得页面跳转功能很好的解耦,特别对于团队开发有很好管理作用。
- 跨模块页面跳转,模块间解耦
- 处理登陆、埋点等逻辑
说明:该场景使用到了路由监听和拦截跳转等功能,在原始处理登陆、埋点等功能中,我们会先初始化Activity,再进行逻辑判断,这样会影响性能,如果我们使用了监听和拦截,那么在初始化新的Activity之前,我们可以先进行逻辑判断。
三、源码下载
链接:https://pan.baidu.com/s/1Y7Br3iKlDb-55VG1kAU70A
提取码:m0at
四、参考文章
- https://www.cnblogs.com/zhujiabin/p/7193400.html
- https://blog.csdn.net/x605940745/article/details/80583912
- https://blog.csdn.net/zhaoyanjun6/article/details/76165252