gpt4 book ai didi

android - android应用程序中的模块间(库项目)通信

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:22:16 25 4
gpt4 key购买 nike

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

那么谁能告诉我如何在这种架构中实现“数据共享层”和“导航 Controller ”?

示例:模块 1 -> 登录,模块 2 -> 配置文件管理等,根据应用程序需要,可能有“n”个模块。

enter image description here

最佳答案

您正在寻找的基本上是一种关于如何与其他类进行通信的简洁方法。它们是否在不同的模块中并没有真正的区别。

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

  1. 定义接口(interface)

编写您需要的接口(interface)。您的登录应该能够打开个人资料页面?好吧,这听起来像是需要一个 LoginNavigator!

interface LoginNavigator {
void showProfile();
}

在您的共享组件中包含这些接口(interface)。不定义接口(interface)是不可能的。您可以使它们更抽象或更细粒度,这完全取决于您。

  1. 声明你的依赖

还记得您的登录如何需要 LoginNavigator 吗?真正的问题是如何将它提供给您的类(class)。你应该看看依赖注入(inject),因为有框架喜欢 那(可能)使这更容易。现在,我们为一个公共(public)组件定义一个接口(interface),以便我们可以检索我们需要的依赖项。

interface NavigatorProvider {
LoginNavigator provideNavigator();
}

您可能猜到了——此方法用于获取实际的 LoginNavigator,您可以使用它来获取该接口(interface)的实现。通常您只需在构造函数中声明此依赖项,但由于 android 有些特殊,您需要自己从某个地方获取它。

  1. 提供你的依赖

最简单的方法是让您的应用程序实现此接口(interface)(或持有实现该接口(interface)的对象)。

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

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

  1. 使用界面。 (并且不关心实现)

现在依赖注入(inject)接近完成。我们有一个我们需要的接口(interface),我们有一些方法来提供依赖性,剩下的就是获取和使用它。

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

现在依赖已提供,可以使用了。


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

关于android - android应用程序中的模块间(库项目)通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35723666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com