Android应用程序中的Intermodule(库项目)通信

Din*_*ash 14 navigation android module data-sharing library-project

在下面显示的图中,我有3个模块(作为android库)扩展了基础"通用组件模块",所有这3个模块将被添加到单个Android应用程序中.所有3个模块都是独立的模块,但当它作为一个应用程序时,它需要共享一些数据,启动其他模块并需要更多的相互通信.

那么有谁能让我知道如何在这种架构中实现"数据共享层"和"导航控制器"?

示例:Module1 - > Login,Module2 - > Profile Management等,根据应用需要可能有"n"个模块.

在此输入图像描述

Dav*_*jak 22

您正在寻找的基本上是如何与其他类通信的干净方法.它们是否在不同的模块中并没有真正的区别.

以下示例描述了如何LoginActivity导航到某个配置文件活动.这只是一个基本的样本,可以根据您的实际需要和打算进行改进!

  1. 定义您的接口

编写您需要的接口.您的登录应该能够打开个人资料页面吗?那听起来好像需要一个LoginNavigator!

interface LoginNavigator {
    void showProfile();
}
Run Code Online (Sandbox Code Playgroud)

在共享组件中包含这些接口.没有定义接口就没有可能去.你可以使它们更抽象或更精细,这完全取决于你.

  1. 声明你的依赖项

还记得你的登录需要LoginNavigator吗?真正的问题是如何将它提供给你的班级.你应该看一下依赖注入,因为有一些框架可以让更容易实现.现在,我们为公共组件定义一个接口,以便我们可以检索所需的依赖项.

interface NavigatorProvider {
    LoginNavigator provideNavigator();
}
Run Code Online (Sandbox Code Playgroud)

您可能会猜到 - 此方法用于获取LoginNavigator可用于获取该接口实现的实际值.通常你只是在构造函数中声明这个依赖项,但是因为android有点特殊,你需要自己从某个地方获取它.

  1. 提供您的依赖项

最简单的方法是让您的应用程序实现此接口(或保存一个对象).

class MyApp extends Application implements NavigatorProvider {

    LoginNavigator provideNavigator() {
        return new LoginNavigator() {
            void showProfile() {
                // just some sample code. You should probably not use an
                // anonymous class
                startActivity(new Intent(this, MyProfileActivity.class));
            }
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

同样,您还可以返回实现此接口的对象.这只是一个基本的样本.

  1. 使用界面.(并不关心实施)

现在依赖注入几乎完成了.我们有一个我们需要的接口,我们有一些方法来提供依赖,剩下的就是获取它并使用它.

class LoginActivity extends Activity {

    LoginNavigator mNavigator;

    void onCreate() {
        // get the dependency
        mNavigator = ((NavigatorProvider) getApplicationContext()).provideNavigator();

        // use it where needed. (again, just sample code)
        findShowProfileView().setOnClickListener(new OnClickListener() {
            void onClick(View view) {
                mNavigator.showProfile();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

现在提供依赖关系,并准备好使用.


这个示例展示了如何基本上使用接口来解耦逻辑.你仍然需要一些入口点,因为android不允许实现你自己的构造函数 - 这就是使用应用程序类的原因.