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

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

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

例如:Module1-> Login,Module2-> Profile Management等,根据应用需要可以有n个模块。

在这里输入图像说明

Solutions Collecting From Web of "Android应用程序中的模块间(库项目)通信"

你所寻找的基本上是一个干净的方法,如何与其他类进行交stream。 他们是否在不同的模块中没有真正的区别。

以下示例描述了LoginActivity如何导航到某个configuration文件活动。 这只是一个基本的样本,需要改进的地方,你真正需要和打算做的!

  1. 定义你的接口

写你所需要的接口。 您的login应该能够打开一个configuration文件页面? 这听起来像是需要一个LoginNavigator

 interface LoginNavigator { void showProfile(); } 

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

  1. 声明你的依赖关系

还记得你的login需要一个LoginNavigator吗? 真正的问题是如何提供给你的class级。 你应该看看dependency injection,因为有框架liks dagger-2 (可以)使这更容易。 现在,我们为通用组件定义一个接口,以便我们可以检索我们需要的依赖关系。

 interface NavigatorProvider { LoginNavigator provideNavigator(); } 

你可能会猜到它 – 这个方法被用来获得实际的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)); } }; } } 

同样,你也可以返回一个实现这个接口的对象。 这只是一个基本的例子。

  1. 使用界面。 (并不在意实施)

现在dependency injection接近完成了。 我们有一个我们需要的接口,我们有一些方法来提供依赖关系,剩下的就是得到它并使用它。

 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不允许实现您自己的构造函数 – 这就是为什么使用应用程序类。