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路由框架相关推荐

  1. Android的路由框架用法

    一.什么是android路由? 主要是映射页面跳转关系,根据路由表将页面请求分发到指定页面. 二.android路由使用场景 App接收到一个通知,点击通知打开App的某个页面 浏览器App中点击某个 ...

  2. 【Android 组件化】路由组件 ( 路由框架概述 )

    文章目录 一.路由框架概述 二.路由框架整体流程 三.博客资源 组件化系列博客 : [Android 组件化]从模块化到组件化 [Android 组件化]使用 Gradle 实现组件化 ( Gradl ...

  3. android 组件化_Android 组件化路由框架设计(仿Arouter)

    前言 在组件化开发中一个必须要面对的问题就是组件间页面跳转,实现的方法有很多,简单的可以通过反射获取,但是比较耗费性能,也可以通过隐式跳转,但是随着页面的增多,过滤条件会随之增多,后期维护麻烦.那还有 ...

  4. WMRouter:美团外卖Android开源路由框架

    WMRouter是一款Android路由框架,基于组件化的设计思路,功能灵活,使用也比较简单. WMRouter最初用于解决美团外卖C端App在业务演进过程中的实际问题,之后逐步推广到了美团其他App ...

  5. android自动路由,GitHub - greatzi/RouterKit: 又一个路由库;Android平台对页面、服务的路由框架。自动化且易用。...

    Jet RouterKit 路由库:Android平台对页面.服务的路由框架.自动化且易用. 基于APT技术(注解-编译时生成代码,不反射,无性能损耗),通过注解方式来实现URL打开Activity功 ...

  6. Android项目解耦--路由框架ARouter的使用

    Android项目解耦–路由框架ARouter源码解析 前言 随着业务量的增长,客户端必然随之越来越业务和功能模块耦合越来越生,开发人员代码维护成本越来越高. App一般都会走向组件化.插件化的道路, ...

  7. XRouter 一个轻量级的Android路由框架,基于ARouter上进行改良,优化Fragment的使用,可结合XPage使用

    XRouter 一个轻量级的Android路由框架,基于ARouter上进行改良,优化Fragment的使用,可结合XPage使用. 关于我 特征 由于是借鉴了ARouter,拥有ARouer所有特征 ...

  8. Android 路由框架ARouter最佳实践

    一.功能介绍 支持直接解析标准URL进行跳转,并自动注入参数到目标页面中 支持多模块工程使用 支持添加多个拦截器,自定义拦截顺序 支持依赖注入,可单独作为依赖注入框架使用 支持InstantRun 支 ...

  9. xpage 传参_一个轻量级的Android路由框架,基于ARouter上进行改良,优化Fragment的使用,可结合XPage使用。...

    XRouter 一个轻量级的Android路由框架,基于ARouter上进行改良,优化Fragment的使用,可结合XPage使用. 关于我 特征 由于是借鉴了ARouter,拥有ARouer所有特征 ...

最新文章

  1. java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)
  2. 面试官让我手写一个生产者消费者模式?
  3. 数据科学之基石:数据科学家必须掌握的10个统计学概念
  4. WPF   --- xmln 两个重要的命名空间
  5. 每日一皮:无良商家,难怪头发越来越少了!
  6. 【组合取补集】数三角形 @CQOI2014/BZOJ3505/upcexam3843
  7. 前端学习(2046)vue之电商管理系统电商系统之通过externals加载外部资源
  8. 基于智能手机Android平台音乐播放器全程开发实战
  9. 论文浅尝 | 知识图谱的单样本关系学习
  10. 怎么在alert里加图片_麻辣烫里加牛奶,创意吃法,麻辣鲜香吃得超过瘾
  11. [转载]使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音量、缩放...
  12. 网站建设如何选择CMS网站系统
  13. 1104报表背景知识
  14. 2007上半年网络游戏企业报告总结
  15. USB3.0 Micro-B引脚定义和封装尺寸
  16. 手把手教你用Python创建SQL数据库~
  17. 达梦 DCA 培训总结
  18. 【MCU】基于STM32CubeMX定时器中断实现LED闪烁
  19. 高度自适应布局 flew伸缩布局
  20. 王瑞平:挺和合国际收《火火的情怀》建交朱之文高安孟文豪谷传民

热门文章

  1. STM32的IIC应用详解3
  2. 贫血模型,充血模型(领域驱动设计)
  3. springboot:SpringBoot项目启动成功,但无法访问且提示404
  4. 数据结构:单向环形链表
  5. python三十三:sys模块
  6. Windows Vista for Developers——第三部分补充:控件和桌面窗口管理器
  7. 史上最通俗易懂的IPFS入门介绍:01
  8. 008PHP文件处理——文件操作r w (用的比较多) a x(用的比较少) 模式 rewind 指针归位:...
  9. Android Studio 提示与技巧(官方文档翻译)
  10. 1-6-Xmanager远程工具的使用