ARouter是阿里2017年开源的页面路由框架,是今年比较火的一个开源框架,目前在Github上已经有2.2k的小星星了。官方对这个框架的定义是ARouter是阿里巴巴开源的Android平台中对页面、服务提供路由功能的中间件,提倡的是简单且够用
Google提供的原声路由主要是通过intent,可以分成显示和隐式两种。显示的方案会导致类之间的直接依赖问题,耦合严重;隐式intent需要的配置清单中统一声明,首先有个暴露的问题,另外在多模块开发中协作也比较困难。只要调用startActivity后面的环节我们就无法控制了,在出现错误时无能为力,而ARouter可以在跳转过程中进行拦截,出现错误时可以实现降级策略。
要使用Arouter我们现在build.gradle引入:
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4' compile'com.alibaba:arouter-api:1.3.1'
在项目工程下的build.gradle的dependencies下引入:
classpath "com.alibaba:arouter-register:1.0.2"
然后在application中的oncreate初始化:
ARouter.openLog(); ARouter.openDebug(); ARouter.init(this);
然后建立一个activity:
public class ArouterTest extends Activity { public static void startActivity(Context context) { Intent intent = new Intent(); intent.setClass(context,ArouterTest.class); context.startActivity(intent); } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.arouter_activity_main); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //页面 ARouter.getInstance().build("/test3/activity3").navigation(); } }); findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { TestService service = (TestService) ARouter.getInstance().build("/testservice/hello").navigation(); service.sayHello("hello sdsdf"); } }); } }
和一个service:
@Route(path = "/testservice/hello") public class TestServiceImpl implements TestService { Context mContext; @Override public void sayHello(String name) { Toast.makeText(mContext, "Hello " + name, Toast.LENGTH_SHORT).show(); } /** * Do your init work in this method, it well be call when processor has been load. * * @param context ctx */ @Override public void init(Context context) { mContext = context; } }
在子工程mylibrary那里建立一个activity:
@Route(path = "/test3/activity3", name = "测试用 Activity") public class MainActivity3 extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); } }
再建立一个service:
public interface TestService extends IProvider { void sayHello(String name); }
运行效果:
点击页面路由就可以跳转去MainActivity3
点击服务路由就可以找到TestService那个服务,然后调用sayHello