ARouter是阿里开源的一款路由框架,他可以方便的去跳转界面,并自动注入参数到目标页面中,处理组件化模式开发,Module间的跳转及通信。
ARoutter-Github地址
在组件化模式开发时,以前应该会遇到过需要跳转其他模块的Activity或Service,去引用其他module就会造成引用非常乱,还会出现循环引用
想跳转就需要隐式跳转,而且要配置Manifest和Intent跳转,难以维护,代码混乱。
那么使用ARouter就可以处理这些问题,首先配置gradle引用
//api
api 'com.alibaba:arouter-api:1.3.1'
//注解处理器(每个需要配置的Module都要引用,否则会匹配不到该Module下的route)
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
然后在defaultConfig下配置
//注解预处理时需要的字段,每个需要配置的Module都要配置,否则匹配不到该Module下的Route
javaCompileOptions {
annotationProcessorOptions {
arguments = [moduleName :project.getName() ]
}
}
配置好了以后进行初始化
public class MyApplication extends Application {
//是否是调试模式
private static final boolean isDebug = true;
@Override
public void onCreate() {
super.onCreate();
if(isDebug) {
//开启日志
ARouter.openLog();
//开始调试模式,如果在DEBUG下不设置的话 在移动修改某些类或配置会出问题,因为有些东西判断版本号变更使用了缓存,开启的话每次会重新获取
ARouter.openDebug();
}
//ARouter 初始化
ARouter.init(this);
}
}
有MainActivity和SimpleActivity,想要实现跳转的话,需要先配置路由 (可将path 配置到一个常量类中进行管理维护)
⚠️ path 最少2级 /xxx/xxx
@Route(path = "/app/MainActivity")
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ARouter.getInstance().inject(this);
}
}
@Route(path = "/app/SimpleActivity")
public class SimpleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple);
ARouter.getInstance().inject(this);
}
}
配置好路由后在MainActivity通过以下api跳转
ARouter.getInstance().build(“/app/SimpleActivity”).navigation();
这样简单的跳转就完成了,下面携带参数进行跳转,在SimpleActivity声明全局变量,通过Autowired注解自动注入
@Autowired
String id;
@Autowired
int type;
然后在MainActivity跳转使用withxxx 携带参数,和Intent一样 String,int 等基础数据类型都支持,对象的传递需要序列化实现Parcelable 或 Serializable
ARouter.getInstance().build("/app/SimpleActivity")
.withString("id","e235425jjfjkd")
.withInt("type",2)
//.withParcelable("person",new Person("gong",27))
.navigation(this,123);
//第二个参数123为requestCode ,相当于startActivityForResult
跳转过去以后就可以直接使用变量了,不需要在手动获取。
组件间的跳转是一样的,无特殊处理,就不需要隐式跳转了。
Activity跳转大概就这些了,拜拜。
Android路由框架 - ARouter使用(二)模块间Service通信调用