gpt4 book ai didi

android - 模块化 android 项目 - 怎么样?

转载 作者:太空狗 更新时间:2023-10-29 14:14:40 24 4
gpt4 key购买 nike

我的场景

我必须实现一个“模块化”android 应用程序。有一个核心模块,我应该能够从中调用其他模块。每个模块为用户提供不同的功能。想象一下我正在制作一份城市指南,然后一个模块可能包含一张带有 POI 的 map ,另一个模块包含一个事件日历,第三个模块包含预定义的城市指南。这些模块包含要在核心模块的 Activity 中加载的 View (例如每个模块放置其项目/图片的仪表板)。它们还包含应调用的 Activity (例如当用户点击仪表板上的项目时)。据我所知,我只需要核心模块中的数据库和/或首选项。 “插件模块”使用核心模块的类(实用程序),例如连接到后端时。

我在 iOS 上的解决方案

对于 iOS,我通过 XCode 中的目标实现了这一点。我有一个项目,根据客户的需求,我只编译相关模块。如果用户可以随时安装模块,而不需要重新安装“核心”应用程序,那就更好了。

我在 Android 上遇到的问题

在 SO 中,我已经找到了各种解决方案,例如库项目,从 Eclipse 切换到 Android Studio + 东西,使用包管理器和广播接收器......但我仍然不明白......android 的模块化如何应用要实现?

以下是我看到的一些具体问题:

  • 库:我的模块都使用核心模块的类,所以它们不是独立的。根据我需要的灵 active ,我通过使用接口(interface)/继承来实现模块化。

  • Broadcast receiver:这似乎不是推荐的所有内容。例如,参见 herehere

至少,我需要的是能够使用相同的代码将具有功能 A 和 B 的应用程序交付给一位客户,同时将具有 B 和 C 的应用程序交付给另一位客户。而且,直到现在,我都不知道如何实现它。

PS:我不想使用脚本,我对此不熟悉。

最佳答案

我不认为这个“模块化”应用程序与一个应用程序有什么不同,它有几个包,每个包都包含独立的功能,适用于一些设置列表或外部参数(由用户或您提供)。

我的方法是拥有一个“主”包。该包将包含您上面提到的共享功能,并作为您的应用程序的中心。然后我会为不同的“附加”功能创建单独的子包。这允许您通过简单的 import 语句仍然使用主包中的代码。根据您的描述,这些附加功能可能应该作为 Fragment 实现。 Fragment 几乎是一个独立的应用程序,只是它由 Activity“托管”。根据这些附加功能的使用方式(我不知道它们是否与 UI 相关,只是后台处理等),您可以轻松拥有 4 个不同 fragment 中的 3 个,并选择在运行时仅加载其中的 1 个或 3 个或 2 个。

为了控制代码的哪些部分被使用,我只需要设置一个简单的切换类(它甚至可以是第一个启动的 Activity 的一部分,我无法从你上面的描述中看出)。在这里,我会检查一些设置,指示应用程序的哪些部分将是“Activity 的”。这可以使用 SharedPreferences 轻松定义以存储特定配置,例如在交付最终项目之前使用 A 和 B。然后,您只需初始化所需的 fragment 并显示它们 (1) 在 Fragment 布局元素或 FrameLayout 中单独显示; (2) 在一些其他 View 结构中统称为 ViewPager

我关注了您在 BroadcastReceiver 上的链接,但我仍然不确定为什么它们“不符合推荐”。正确使用 BroadcastReceiver 非常有用。我倾向于使用 LocalBroadcastManagerBroadcastReceiver 在某些 AsyncTask 时通知应用程序的其他部分,例如下载了很多资料,完成了。然后,应用程序的这些部分可以访问本地数据库或处理自己下载的信息。如果您需要的话,我不会使用 BroadcastReceiver 来调制应用程序的某些部分。我只想使用 SharedPreference 文件在运行时设置配置。

关于android - 模块化 android 项目 - 怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23603515/

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