一款简易Android路由框架

AndroidRouter: https://github.com/JasmineBen/AndroidRouter

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比较小巧,使用简单,且可以应用于组件化开发。

你可能感兴趣的:(一款简易Android路由框架)