2

我在一个有几个开发人员的项目上工作。我们开发一个相当大的应用程序。每个开发人员都有几个活动,可以看作是整个主应用程序的子应用程序。

我确实意识到,这可能不是最好的设计,但它存在,我们必须以某种方式处理它。

现在的主要问题是,我们需要一个 master,它始终处于活动状态并检查 I/O 等,并且可以为每个子应用程序/活动提供状态更改。诸如“我们刚刚失去了互联网连接”之类的东西。

现在,那个master是一个单例,它首先由启动器活动实例化,每个活动/子应用程序都可以通过传递适当的接口来注册,具体取决于活动想要接收的更新。

这是有效的,但感觉不对,因为单例需要上下文来访问系统资源以确定系统状态,如互联网或 gps。如果单例被操作系统杀死,那么简单的“getInstance”不会有多大好处,因为单例需要以某种方式获取上下文。我已经阅读了有关扩展 Application 类并在那里创建静态成员上下文的信息,但是这个变量必须是 volatile 并且如果整个应用程序处于某种重启后崩溃/终止状态,它可能返回 null。感觉不安全。

此外,主人也应该有可能以某种方式打开用户对话框以向用户显示警告等。这些警告在整个应用程序中看起来应该是相同的,开发人员不必担心它何时或为何突然弹出。现在,这些消息显示为覆盖所有内容的自定义祝酒词。当然,它们需要上下文,如果应用程序即将关闭,则可能会出现问题。

总而言之,这就是我们所处的混乱局面,我正在寻找解决方案。

那么我如何创建一个安全的主对象或活动(甚至是服务?!),它可以将信息传递给不同的活动并发布警告等(甚至可能有能力关闭活动或至少命令它们在不需要的情况下关闭自己注册一个 can_close 接口)。

它应该是安全的,如果在崩溃后 android 仅重新启动处于活动状态的活动,它会以某种方式设法也重新启动或至少具有/提供与以前相同的信息。

欢迎每个想法,但无法对应用程序进行全面检修(缺乏时间和人力)

4

2 回答 2

3

这里有一些想法:

  1. Service为您需要做的所有监控创建一个组件。如果我理解正确,则仅当某些活动正在运行时才需要此服务。所以你可以把它变成一种bound 服务。让所有活动bind在启动时与此服务绑定,并在关闭时解除绑定。该服务将在第一个活动绑定时启动。
  2. 为您的所有活动创建一个基类。您可以在此处编写所有常用代码。例如,绑定到主服务并与主服务交换消息的代码。此类还可以包含用于通知用户等的实用方法。因此所有活动都将使用相同的方法进行通知。
  3. 对于用户通知,您可以使用Status Bar Notification或创建一个Fragment可以捕获、聚合和显示通知的工具。您可以在基本 Activity 类中实现一个通用菜单项来显示/隐藏此 Fragment。如果您使用状态栏通知,请确保为您的应用使用一个聚合通知。否则,不同的活动可能会在状态栏中造成混乱。
于 2012-10-03T12:24:55.907 回答
0

我想一种解决方案是创建一个作为主服务的服务。您必须让它独立于不同的活动运行(但如果不再使用应用程序,请不要忘记管理自己以整齐地关闭它,您不想杀死您的客户电池)。但是,服务不能对接口起作用,因此您可能需要向活动广播消息以命令它们打开对话框。

最后的想法:祝酒词还可以,但阻止界面的弹出窗口非常糟糕,尤其是在移动设备上。

于 2012-10-03T11:49:28.577 回答