路由(ARouter)

一、什么是路由。

ARouter是阿里巴巴开源的Android平台的对页面跳转、服务提供路由功能的中间件,使用起来比较简单。

二、原生路由的问题。

1、原生路由intent,有两种实现形式,显式与隐式。显式的情况下,与类之间存在依赖关系,耦合性比较高。

2、隐式方式一般在清单文件中进行配置,扩展性比较差。

3、原生路由页面跳转无法控制,一旦使用了StartActivity()就无法插手其中任何环节,只能交给系统管理,这就导致了在跳转失败的情况下无法降级,而是会直接抛出运营级的异常

三、路由框架的特点。

1、分发:分发是路由框架最基本的功能,也就是简单的跳转。

2、将组件和页面按照一定的规则管理。

3、路由的过程中可以对路由进行定制性扩展。

四、路由的优点

1、支持直接解析标准URL进行跳转,并自动注入参数到目标页面中

2、支持多模块工程使用

3、支持添加多个拦截器,自定义拦截顺序

4、支持依赖注入,可以单独作为依赖注入框架使用

5、支持MultiDex(Google 方案)

6、映射关系按组分类、多级管理、按需初始化

7、灵活的降级策略,支持用户全局降级与局部降级

8、支持多种多种方式配置转场动画

9、支持获取fragment

10、完全支持Kotlin以及混编

11、页面、拦截器、服务均自动注册到框架

五、接入说明

1、添加依赖和配置

android {

    defaultConfig {

         javaCompileOptions {

             annotationProcessorOptions {

                  arguments = [moduleName : project.getName() ]

             }

         }

    }

}

 dependencies {

    // 替换成最新版本, 需要注意的是api

    // 要与compiler匹配使用,均使用最新版可以保证兼容

    compile'com.alibaba:arouter-api:x.x.x'

    annotationProcessor'com.alibaba:arouter-compiler:x.x.x'

    ...

}

2、添加代码混淆

-keep publicclass com.alibaba.android.arouter.routes.**{*;}

-keep class *implements com.alibaba.android.arouter.facade.template.ISyringe{*;}

3、初始化

//打印日志

ARouter.openLog()

//开启调试模式、线上必须关闭

ARouter.openDebug()

//尽可能早在Application中

ARouter.init(this)

六、使用说明

1、添加注解

@Route(path ="/test1/Activity1")

public class Activity1 extend Activity {

  ...

}

2、应用内简单跳转

ARouter.getInstance().build(/test/activity).navigation();

3、带参数的跳转

ARouter.getInstance().build(/test/activity).withString("name","皑皑")

.withInt("year",10).withObject("object",new Object()).navigation();

参数类型:

withBoolean(String key,Boolean value)

withChar(String key,char value)

withShort(String key,short value)

withInt(String key,int value)

withLong(String key,long value)

.......

//跳转动画

.withTransition(int enterAnim,int exitAnim)

4、带导航回调跳转

ARouter.getInstance().build("/test/activity").navigation(this,new NavCallback(){

@Override

public void onArrival(Postcard postcard)

{

}

@Override

public void onInterrupt(Postcard postcard)

{

}

});

5、自定义分组

@Route(path ="/test1/Activity",group=“custom”)

public class Activity extend Activity {

  ...

}

ARouter.getInstance().build("/test1/Activity1", "custom").navigation();

6、Fragment路由

@Route(path = "/com/OneFragment")

public class OneFragment extends Fragment {

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_one, container, false);

return view ;

}

}

//获取fragment的实例

Fragment fragment = (Fragment) ARouter.getInstance().build( "/com/OneFragment" ).navigation();

7、暴露服务

自定义接口

public interface IService extends IProvider {

void sayHello(Context context );

}

先定义一个 IService 的实现类 MyService 并且添加注解

@Route(path = "/service/hello", name = "测试服务")

public class MyService implements IService {

@Override

public void sayHello( Context context ) {

Toast.makeText( context , "hello", Toast.LENGTH_SHORT).show(); }

@Override

public void init(Context context) { }}

发现服务,先定义服务对象,添加注解

@Autowired(name = "/service/hello")

IService service;

添加注解初始化,自动赋值

ARouter.getInstance().inject(this);

调用service中sayHello()方法

service.sayHello(this);

8、关闭路由

Arouter.getInstance().destory();


猜你喜欢

转载自blog.csdn.net/gqdbk/article/details/80115168