设为首页 加入收藏

TOP

Android路由框架-ARouter详解(非原创)(三)
2019-09-01 23:12:46 】 浏览:64
Tags:Android 路由 框架 -ARouter 详解 原创
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); //解析参数 Bundle bundle = getIntent().getExtras(); String name1 = bundle.getString("name"); textView.setText("参数是: " + "name: " + name + " age: " + age + " boy: " + boy + " name1: " + name1 + " obj: " + obj.toString() ); } } 

效果图如下:

 

暴露服务
??这里说到的服务不是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.常见应用场景

  1. 从外部URL映射到内部页面,以及参数传递与解析
    说明:该场景使用到了该文章的URL跳转和暴露服务功能,这样使得页面跳转功能很好的解耦,特别对于团队开发有很好管理作用。
  2. 跨模块页面跳转,模块间解耦
  3. 处理登陆、埋点等逻辑
    说明:该场景使用到了路由监听和拦截跳转等功能,在原始处理登陆、埋点等功能中,我们会先初始化Activity,再进行逻辑判断,这样会影响性能,如果我们使用了监听和拦截,那么在初始化新的Activity之前,我们可以先进行逻辑判断。

三、源码下载

链接:https://pan.baidu.com/s/1Y7Br3iKlDb-55VG1kAU70A
提取码:m0at

四、参考文章

    1. https://www.cnblogs.com/zhujiabin/p/7193400.html
    2. https://blog.csdn.net/x605940745/article/details/80583912
    3. https://blog.csdn.net/zhaoyanjun6/article/details/76165252
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android屏幕适配讲解与实战(原创) 下一篇Android中资源的引用

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目