在 Android 中,一个应用程序通常由多个模块(Module)组成,每个模块负责不同的功能。在模块之间进行通信时,必须建立依赖关系,以便在编码时可以访问另一个模块提供的代码和资源。
如果没有建立依赖关系,那么一个模块无法访问另一个模块的代码和资源,也无法调用其中的方法和类。这是因为在编译期间,每个模块都是独立编译的,每个模块的代码和资源都被打包成一个独立的 APK 或 AAR 文件,相互之间是隔离的。
为什么需要组件间通信呢,是因为在编译期不同组件之间无法引用对方的代码,那么要实现组件间通信的方法就是避开编译期的限制,主要方法有运行时引用(反射、动态代理), 代码插桩(class修改,已经编译过了,所以没有限制);
比如A组件有代码:
class TestA {
public String getId() {
return "123";
}
}
B组件需要调用A组件的getId方法:
那么在B组件中可以使用:
// 反射
Class<?> clazz = Class.forName("com.example.TestA");
Method method = clazz.getMethod("getId");
Object obj = clazz.newInstance();
String id = (String) method.invoke(obj);
System.out.println(id);
}
网友评论