在Android开发中,最常见也是最常用的功能就是页面的跳转,我们经常需要面对从浏览器或者其他App跳转到自己App中页面的需求,不过就算是简简单单的页面跳转,随着时间的推移,也会遇到一些问题:
(1)集中式的URL管理:谈到集中式的管理,总是比较蛋疼,多人协同开发的时候,大家都去AndroidManifest.xml中定义各种IntentFilter,使用隐式Intent,最终发现AndroidManifest.xml中充斥着各种Schame,各种Path,需要经常解决Path重叠覆盖、过多的Activity被导出,引发安全风险等问题
(2)可配置性较差:Manifest限制于xml格式,书写麻烦,配置复杂,可以自定义的东西也较少
(3)跳转过程中无法插手:直接通过Intent的方式跳转,跳转过程开发者无法干预,一些面向切面的事情难以实施,比方说登录、埋点这种非常通用的逻辑,在每个子页面中判断又很不合理,毕竟activity已经实例化了
(4)跨模块无法显式依赖:在App小有规模的时候,我们会对App做水平拆分,按照业务拆分成多个子模块,之间完全解耦,通过打包流程控制App功能,这样方便应对大团队多人协作,互相逻辑不干扰,这时候只能依赖隐式Intent跳转,书写麻烦,成功与否难以控制。
为了解决以上问题,我们需要一款能够解耦、简单、功能多、定制性较强、支持拦截逻辑的路由组件:我们选择了Alibaba的ARouter,ARouter是阿里巴巴开源出来的一款Android路由框架。
功能介绍
1.添加依赖和注解
apply plugin: 'com.neenbedankt.android-apt'
2.添加注解
// 在支持路由的页面、服务上添加注解(必选)
// 这是最小化配置,后面有详细配置
@Route(path ="/test/1")
public class YourActivity extend Activity{ ... }
3.初始化SDK
ARouter.init(mApplication);// 尽可能早,推荐在Application中初始化
4.发起路由操作
// 1. 应用内简单的跳转(通过URL跳转在'中阶使用'中)
ARouter.getInstance().build("/test/1").navigation();
// 2. 跳转并携带参数
ARouter.getInstance().build("/test/1")
.withLong("key1",666L)
.withString("key3","888")
.navigation();
5.通过URL跳转
// 新建一个Activity用于监听Schame事件
// 监听到Schame事件之后直接传递给ARouter即可
// 也可以做一些自定义玩法,比方说改改URL之类的
// http://www.example.com/test/1
public classSchameFilterActivityextendsActivity {
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 外面用户点击的URL
Uri uri = getIntent().getData();
// 直接传递给ARouter即可
ARouter.getInstance().build(uri).navigation();
finish();
}
}
6.
网友评论