【问题标题】:How to communicate between lib module and main modulelib模块和主模块之间如何通信
【发布时间】:2015-09-07 12:26:13
【问题描述】:

建设

我有 2 个模块:

  • app(申请)
  • box(库模块)

问题

我正在尝试使用box 模块中的app 模块的一部分。 问题是app 模块依赖于box 模块,因此我不能指向box 模块,因为这会产生循环依赖。

如何从box模块获取app模块方法?

或者

如何通知app模块中的某个接收者有一些数据要获取?

编辑

我以第三个模块 common 结束,它包含模块 appbox 的交集。

【问题讨论】:

标签: android


【解决方案1】:

您不能直接调用依赖于您的库的模块。这种依赖会破坏图书馆的目的。但是您可以在 Box 模块中定义一个接口,该库的客户端必须实现该接口才能正常运行。

示例: 在您的 Box 模块中定义一个接口

interface ThereIsSomeDataToGet(){
   void doSomething();
}

在你的应用模块中,你可以调用

Box.registerCallback(new ThereIsSomeDataToGet(){...})

现在在 box 模块中你有一个回调到你的应用程序模块,没有任何硬依赖,当你有一些新数据的库时,你只需要调用

ThereIsSomeDataToGet.doSomething();

【讨论】:

  • 如果活动在 Box.registerCallback(new ThereIsSomeDataToGet(){...}) 之后和 ThereIsSomeDataToGet.doSomething(); 之前重新启动怎么办?
【解决方案2】:

进一步阐述汤姆的回答,这是一个完全有效的解决方案:

在您的 Box 模块中:

public interface Callback {
    void doSomething();
}

private static Callback callback;

public static void setCallback(Callback callback) {
    Box.callback = callback;
}

在您的应用模块中:

Box.setCallback(new Box.Callback() {
    @Override
    public void doSomething() {
        // Code from App module you want to run in Box module
    }
});

最后,只需从您的 Box 模块中调用 doSomething()

callback.doSomething();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 2013-06-07
    • 2013-10-04
    • 2018-10-14
    相关资源
    最近更新 更多