Android日志:ARouter实现模块间通讯
2021-10-02 本文已影响0人
搬码人
什么是ARouter
参考https://github.com/alibaba/ARouter
这是开源库中的解释:
A framework for assisting in the renovation of Android app componentization
一个帮助Android应用程序组件化革新的框架
如何通过ARouter实现模块间的通讯
添加相关依赖
有关依赖:
其余部分的消息内容在上一节已经提过:模块化和组件化
注:哪个模块需要添加ARouter,就必须添加ARouter的注解处理器
libBase中为编译期间生成路径映射,同时也需要在各子模块build中加入
image.pngimage.png
1、注册业务层的Activity
添加注解@Router,指定路径path
image.png image.png2、在宿主app中创建application(我命名为App),并初始化SDK。
/**
*@Description
*@Author PC
*@QQ 1578684787
*/
class App: Application() {
override fun onCreate() {
super.onCreate()
initRouter(this)
}
private fun initRouter(application: Application){
if (BuildConfig.DEBUG){
ARouter.openLog()
ARouter.openDebug()
}
ARouter.init(application)
}
}
配置更改
3、启动路由
这里实在壳工程中的StartActivity跳转到LoginActivity,并带有一些参数
class StartActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_start)
ARouter.getInstance()
.build("/login/LoginActivity")
.withLong("key1",250L)
.withString("key2","666")
.withSerializable("data", User("张文品"))
//发射数据
.navigation()
}
}
User是我自定义的数据类,用于对可序列化数据传递进行测试,将其定义在libBase(基础组件层)。
/**
*@Description
*@Author PC
*@QQ 1578684787
*/
data class User(val name:String) : Serializable
模块间数据的传递
数据的接收
@Route(path = "/login/LoginActivity")
class LoginActivity : AppCompatActivity() {
@Autowired
val key1:Long ?=null
@Autowired(name = "key2")
val str:String ?= null
@Autowired
val user:User?=null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
//调用注入方法
ARouter.getInstance().inject(this)
//测试打印
Log.v("pc","key1:${key1}")
Log.v("pc","key2:${str}")
Log.v("pc","User:${user}")
}
}
上方设计到两种接受数据的方式,一种是不用指定name直接使变量名与发送方的key值保持一致;第二种是指定name,这样的好处就是即使变量名更改,接受的对象也不会改变。
image.png了解更多:https://github.com/alibaba/ARouter