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

时间:2016-03-01 13:01:30

标签: android module navigation library-project data-sharing

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

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

示例:Module1 - >登录,模块2 - > Profile Management等,根据应用需要可能有“n”个模块。

enter image description here

1 个答案:

答案 0 :(得分:17)

您正在寻找的基本上是如何与其他课程沟通的干净方法。它们是否属于不同的模块并没有什么区别。

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

  1. 定义界面
  2. 编写您所需内容的界面。您的登录应该能够打开个人资料页面吗?这听起来好像需要LoginNavigator

    interface LoginNavigator {
        void showProfile();
    }
    

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

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

      interface NavigatorProvider {
          LoginNavigator provideNavigator();
      }
      

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

      1. 提供您的依赖项
      2. 最简单的方法是让你的应用程序实现这个接口(或者保存一个对象)。

        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));
                    }
                };
            }
        }
        

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

        1. 使用界面。 (并且不关心实施)
        2. 现在依赖注入已接近完成。我们有一个我们需要的界面,我们有一些方法来提供依赖,剩下的就是获取并使用它。

          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();
                      }
                  });
              }
          }
          

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

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