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") SparseArraysparseArrayP, @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下来查看