android 组件路由框架,一款简易Android路由框架

AndroidRouter是一款路由框架,用于实现个模块之间的Activity跳转。本文基于注解、编译时字节码修改等技术实现了一款路由,实现了一款可用于组件化开发的路由框架,通过如下方式定义路由:

@Route(authority="sampleAuthority",path="samplePath",desc="sampleDesc")

通过如下方式进行跳转:

Router.getInstance().openScheme(activity,url,bundleData,requestCode)

跳转的时候参数不再需要使用者自己通过Intent方式传输,直接写在url中即可。

使用方式:

1、集成组件

dependencies {

api 'com.conan.router:router-anno:1.0.1'

annotationProcessor 'com.conan.router:router-compiler:1.0.1'

api 'com.conan.router:router-lib:1.0.1'

}

router{

routerImpl='com.conan.router.samples.SampleRouter'

}

2、定义target路由

@Route(authority = "app",path = "MainActivity2",desc = "MainActivity2")

public class MainActivity2 extends AppCompatActivity {

@Inject(name = "")

String name;

@Inject(name = "age")

String age;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main2);

InjectService.inject(this);

TextView tv = findViewById(com.conan.router.samples.R.id.text);

tv.setText(name+":"+age);

findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

Router.getInstance().openScheme(MainActivity2.this,"router://app/MainActivity3?name1=MainActivity3&age1=1800",null,-1);

}

});

}

}

在定义路由时,通过@Route定义authority,path信息,通过@Inject完成Intent中参数的注入,注意@inject定义的值必须在路由的scheme中;同一个module最好使用同一个authority,相同的authority不能使用相同的path;不同的module需要使用不同的authority。

3、注册路由

public class MyApplication extends Application{

@Override

public void onCreate() {

super.onCreate();

Router.getInstance().addBaseRouterImpl("com.conan.router.AppRouter");

SamplesApplicationLike.getInstance().onCreate();

}

}

4、路由跳转

Router.getInstance().openScheme(MainActivity.this,"router://sample/SampleActivity?sampleName=sample&sampleAge=18",null,-1);

AndroidRouter的使用分为4步:集成组件、定义路由、注册路由、路由跳转(简单吧)。

注意:第1步的routerImpl和第3步的addBaseRouterImpl定义的路由实现类需要是一致的。

组件化支持

为了支持组件化,子module中需要除了以上4步之外,还需要提供一个入口类,用于注册子模块的路由,如下所示:

public class SamplesApplicationLike {

private static SamplesApplicationLike mInstance = new SamplesApplicationLike();

private SamplesApplicationLike(){}

public static SamplesApplicationLike getInstance(){

return mInstance;

}

public void onCreate(){

Router.getInstance().addBaseRouterImpl("com.conan.router.samples.SampleRouter");

}

}

在app的Application中需要调用子模块的注册路由方法,这样主模块就能访问到子模块的路由信息,子模块也可以访问到主模块的路由。

总结

AndroidModule比较小巧,使用简单,且可以应用于组件化开发。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值