组件和模块间Activity路由框架
AFRouter
组件和模块间Activity路由框架,通过动态代理技术实现,轻量、灵活
特性
- 支持绝大多数参数类型(Intent可携带的数据类型)
- 专为组件和模块间Activity路由设计,组件化UI路由解耦
- 支持options(Android 5.0 启动Activity方式)
- 支持Context、Activity和Fragment作为调用者(Activity.startActivity()、Context.startActivity()和Fragment.startActivity())
- 支持设置request code(startActivityForResult())
- 提供拦截器(Interceptor),全局过滤Activity
- 支持安全启动Activity(未找到目标Activity时路由到默认的Activity)
- 可以得到Intent包装类Wrapper,然后可以自己作处理
- 支持Android 2.3及以上版本
使用
添加依赖
dependencies {api 'com.tubb.afrouter:afrouter:0.3.0'
}复制代码
定义Router Service
首先要定义Router Service
,告诉框架如何来启动一个Activity,直接来看示例
public interface AFRouterService {/*** 以Activity类全名的方式来启动Activity*/@ActivityName("com.tubb.afrouter.sample.NormalActivity") // 类全名void start();/*** 指定Action的方式来启动Activity* @param action intent action* @param reqCode startActivityForResult() request code*/void actionStart(@ParamKey("action") String action, @ParamKey("reqCode") int reqCode);@ActivityName("com.tubb.afrouter.sample.NormalActivity")void forResult(@ParamKey("reqCode") int reqCode);@ActivityName("com.tubb.afrouter.sample.BackStartActivity")void backStart();/*** 自己手动处理Activity的启动* @return Intent Wrapper*/@ActivityName("com.tubb.afrouter.sample.NormalActivity")Wrapper returnTypeStart();/*** 携带options* @param bundle 5.0 options*/@ActivityName("com.tubb.afrouter.sample.NormalActivity")void activityOptionsStart(@ParamKey("options") Bundle bundle);/*** 支持携带的参数类型*/@ActivityName("com.tubb.afrouter.sample.VerifyParamsActivity")void verifyParams(@ParamKey("strP") String strP, @ParamKey("strsP") String[] strsP,@ParamKey("intP") int intP, @ParamKey("intsP") int[] intsP,@ParamKey("shortP") short shortP, @ParamKey("shortsP") short[] shortsP,@ParamKey("longP") long longP, @ParamKey("longsP") long[] longsP,@ParamKey("charP") char charP, @ParamKey("charsP") char[] charsP,@ParamKey("doubleP") double doubleP, @ParamKey("doublesP") double[] doublesP,@ParamKey("floatP") float floatP, @ParamKey("floatsP") float[] floatsP,@ParamKey("byteP") byte byteP, @ParamKey("bytesP") byte[] bytesP,@ParamKey("booleanP") boolean booleanP, @ParamKey("booleansP") boolean[] booleansP,@ParamKey("bundleP") Bundle bundleP,@ParamKey("sparseArrayP") SparseArray<ParcelableEntity> sparseArrayP,@ParamKey("arrayListIntP") ArrayList<Integer> arrayListIntP,@ParamKey("arrayListStringP") ArrayList<String> arrayListStringP,@ParamKey("arrayListCharSequenceP") ArrayList<CharSequence> arrayListCharSequenceP,@ParamKey("arrayListParcelableP") ArrayList<ParcelableEntity> arrayListParcelableP,@ParamKey("parcelableArrayP") ParcelableEntity[] parcelableArrayP,@ParamKey("parcelableP") ParcelableEntity parcelableP,@ParamKey("serializableP") SerializableEntity serializableP);
}复制代码
快速使用
定义了Router Service
后,后面的调用流程将非常简单,一两行代码即可启动Activity
// Router Service可以保存在全局变量中
AFRouterService afService = AFRouter.getInstance().create(AFRouterService.class, this);
afService.forResult(FOR_RESULT_CODE);复制代码
通过Wrapper类使用
得到框架对Intent包装类Wrapper,然后由自己来处理
Wrapper wrapper = afService.returnTypeStart();
// wrapper.addFlags();
// wrapper.setAction();
// wrapper.setClassName();
// // 真实的Intent
// wrapper.getIntent();
wrapper.start();复制代码
拦截过滤
支持全局拦截,可以过滤掉一些Activity
afService = AFRouter.getInstance().create(AFRouterService.class, this, new Interceptor() {@Overridepublic boolean intercept(Wrapper wrapper) {Toast.makeText(wrapper.getContext(), "Interceptor return true", Toast.LENGTH_SHORT).show();return true;}
});
afService.backStart();复制代码
框架内置的几个参数
"action" Intent Action 如果传了这个参数,`Intent.setAction()`将会被调用
"reqCode" startActivityForResult() request code 如果传了这个参数,最终调用的是`startActivityForResult()`
"options" startActivity(Intent intent, Bundle options) 如果传了这个参数,`startActivity(Intent intent, Bundle options)`或`startActivityForResult(Intent intent, Bundle options)`将被调用复制代码
配置默认Activity(找不到目标Activity时显示的Activity,避免APP崩溃)
<meta-datatools:replace="android:value"android:name="com.tubb.afrouter.ERROR_ACTIVITY_CLASS_NAME"android:value="[默认Activity的类全名(包名.类名)]"/>复制代码
详细使用请参照源码工程,强烈建议clone下来查看
转载于:https://juejin.im/post/59e2ccb26fb9a0452577258c
组件和模块间Activity路由框架相关推荐
- Android的路由框架用法
一.什么是android路由? 主要是映射页面跳转关系,根据路由表将页面请求分发到指定页面. 二.android路由使用场景 App接收到一个通知,点击通知打开App的某个页面 浏览器App中点击某个 ...
- 【Android 组件化】路由组件 ( 路由框架概述 )
文章目录 一.路由框架概述 二.路由框架整体流程 三.博客资源 组件化系列博客 : [Android 组件化]从模块化到组件化 [Android 组件化]使用 Gradle 实现组件化 ( Gradl ...
- android 组件化_Android 组件化路由框架设计(仿Arouter)
前言 在组件化开发中一个必须要面对的问题就是组件间页面跳转,实现的方法有很多,简单的可以通过反射获取,但是比较耗费性能,也可以通过隐式跳转,但是随着页面的增多,过滤条件会随之增多,后期维护麻烦.那还有 ...
- WMRouter:美团外卖Android开源路由框架
WMRouter是一款Android路由框架,基于组件化的设计思路,功能灵活,使用也比较简单. WMRouter最初用于解决美团外卖C端App在业务演进过程中的实际问题,之后逐步推广到了美团其他App ...
- android自动路由,GitHub - greatzi/RouterKit: 又一个路由库;Android平台对页面、服务的路由框架。自动化且易用。...
Jet RouterKit 路由库:Android平台对页面.服务的路由框架.自动化且易用. 基于APT技术(注解-编译时生成代码,不反射,无性能损耗),通过注解方式来实现URL打开Activity功 ...
- Android项目解耦--路由框架ARouter的使用
Android项目解耦–路由框架ARouter源码解析 前言 随着业务量的增长,客户端必然随之越来越业务和功能模块耦合越来越生,开发人员代码维护成本越来越高. App一般都会走向组件化.插件化的道路, ...
- XRouter 一个轻量级的Android路由框架,基于ARouter上进行改良,优化Fragment的使用,可结合XPage使用
XRouter 一个轻量级的Android路由框架,基于ARouter上进行改良,优化Fragment的使用,可结合XPage使用. 关于我 特征 由于是借鉴了ARouter,拥有ARouer所有特征 ...
- Android 路由框架ARouter最佳实践
一.功能介绍 支持直接解析标准URL进行跳转,并自动注入参数到目标页面中 支持多模块工程使用 支持添加多个拦截器,自定义拦截顺序 支持依赖注入,可单独作为依赖注入框架使用 支持InstantRun 支 ...
- xpage 传参_一个轻量级的Android路由框架,基于ARouter上进行改良,优化Fragment的使用,可结合XPage使用。...
XRouter 一个轻量级的Android路由框架,基于ARouter上进行改良,优化Fragment的使用,可结合XPage使用. 关于我 特征 由于是借鉴了ARouter,拥有ARouer所有特征 ...
最新文章
- java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)
- 面试官让我手写一个生产者消费者模式?
- 数据科学之基石:数据科学家必须掌握的10个统计学概念
- WPF --- xmln 两个重要的命名空间
- 每日一皮:无良商家,难怪头发越来越少了!
- 【组合取补集】数三角形 @CQOI2014/BZOJ3505/upcexam3843
- 前端学习(2046)vue之电商管理系统电商系统之通过externals加载外部资源
- 基于智能手机Android平台音乐播放器全程开发实战
- 论文浅尝 | 知识图谱的单样本关系学习
- 怎么在alert里加图片_麻辣烫里加牛奶,创意吃法,麻辣鲜香吃得超过瘾
- [转载]使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音量、缩放...
- 网站建设如何选择CMS网站系统
- 1104报表背景知识
- 2007上半年网络游戏企业报告总结
- USB3.0 Micro-B引脚定义和封装尺寸
- 手把手教你用Python创建SQL数据库~
- 达梦 DCA 培训总结
- 【MCU】基于STM32CubeMX定时器中断实现LED闪烁
- 高度自适应布局 flew伸缩布局
- 王瑞平:挺和合国际收《火火的情怀》建交朱之文高安孟文豪谷传民
热门文章
- STM32的IIC应用详解3
- 贫血模型,充血模型(领域驱动设计)
- springboot:SpringBoot项目启动成功,但无法访问且提示404
- 数据结构:单向环形链表
- python三十三:sys模块
- Windows Vista for Developers——第三部分补充:控件和桌面窗口管理器
- 史上最通俗易懂的IPFS入门介绍:01
- 008PHP文件处理——文件操作r w (用的比较多) a x(用的比较少) 模式 rewind 指针归位:...
- Android Studio 提示与技巧(官方文档翻译)
- 1-6-Xmanager远程工具的使用