博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
组件和模块间Activity路由框架
阅读量:5984 次
发布时间:2019-06-20

本文共 4455 字,大约阅读时间需要 14 分钟。

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
sparseArrayP, @ParamKey("arrayListIntP") ArrayList
arrayListIntP, @ParamKey("arrayListStringP") ArrayList
arrayListStringP, @ParamKey("arrayListCharSequenceP") ArrayList
arrayListCharSequenceP, @ParamKey("arrayListParcelableP") ArrayList
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() {    @Override    public 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崩溃)

复制代码

详细使用请参照,强烈建议clone下来查看

转载于:https://juejin.im/post/59e2ccb26fb9a0452577258c

你可能感兴趣的文章
nodejs 黑名单中间件设计
查看>>
三, 跨语言微服务框架 - Istio官方示例(自动注入.请求路由.流量控制.故障注入)...
查看>>
scala 柯里化练习
查看>>
记录一次线上GC问题和原因分析,FullGC到一定次数就停止FullGC
查看>>
何为HipHop?
查看>>
OSChina 周一乱弹 —— 怎么搭讪学医的女孩,说你有病!
查看>>
eclipse 和 myeclipse 的区别
查看>>
goroutine 相关知识5
查看>>
Hive Outline - Part I (UDF, JOIN, SELECT, Map-Red)
查看>>
用pexpect和连接ssh交互
查看>>
使用eclipse创建maven web项目
查看>>
检查能否ping通
查看>>
SCSI PRs命令研究总结2 - PRs命令规范
查看>>
CentOS搭建单机版fastdfs:多分组模式
查看>>
js输入框限制输入
查看>>
第一个 Gradle 脚本及简单命令
查看>>
android4.0触摸屏滑鼠模式解决方法-添加idc文件
查看>>
SUSE Linux overcommit memory 和 oom-killer
查看>>
I/o重定向详解
查看>>
hive 0.13 源码编译方法
查看>>