我在一个有几个开发人员的项目上工作。 我们致力于一个相当大的应用程序。 每个开发人员都有几个活动,可以看作是整个主应用程序的子应用程序。
我确实知道,这可能不是最好的设计,但它存在,我们必须以某种方式处理它。
现在的主要问题是,我们需要一个主服务器,它始终处于活动状态并检查I / O等,并且可以为每个子应用程序/活动提供状态更改。像“我们刚刚失去了互联网连接”等等。
现在,该master是一个单例,它首先由启动器活动实例化,并且每个活动/子应用程序都可以通过传递适当的接口来注册,具体取决于活动想要接收的更新。
这是有效的,但感觉不对,因为单身人士需要上下文来访问系统资源以确定系统状态,如互联网或gps。如果单身人士被OS杀死,那么简单的“getInstance”就不会有太大的好处,因为单身人士会以某种方式获得一个上下文。我已经阅读了有关扩展Application类并在那里创建静态成员上下文的内容,但是这个变量必须是volatile,如果整个应用程序处于某个restart-after-crash / kill状态,它可能会返回null。感觉不安全。
此外,还应该有可能主人以某种方式打开用户对话框以向用户显示警告等。这些警告应该在整个应用程序中看起来相同,并且没有开发人员应该担心它突然弹出的时间或原因。现在,这些消息显示为覆盖所有内容的自定义Toast。当然,他们需要上下文,如果应用程序即将关闭,则可能存在问题。
总而言之,这就是我们所处的混乱,我正在寻找解决方案。
那么我如何创建一个安全的主对象或活动(甚至是服务?!),它可以将信息传递给不同的活动并发布警告等(甚至可能有能力关闭活动或者至少命令它们关闭自己无需注册can_close接口)。
应该是安全的,如果在崩溃后android只重新启动活动的活动,它会以某种方式重新启动或至少拥有/提供与以前相同的信息。
每个想法都是受欢迎的,但应用程序的彻底检修是不可能的(缺乏时间和人力)
答案 0 :(得分:3)
以下是一些想法:
Service
组件。
如果我理解正确,只有在需要时才需要此服务
一些活动正在运行。所以你可以把它变成bound
服务。在开始时,让所有活动bind
加入此服务
当他们关闭时解除绑定。该服务将在以下时启动
第一项活动是绑定。Status Bar Notification
或创建可以捕获,聚合的Fragment
并显示通知。你可以有一个共同的菜单项
在Activity Activity类中实现,以显示/隐藏此Fragment。
如果您使用状态栏通知,请确保使用一个聚合
您的应用通知。否则,可能会有不同的活动
在状态栏中创建一个混乱。答案 1 :(得分:0)
我想一个解决方案就是创建一个充当主服务器的服务。 你将不得不让它独立于不同的活动运行(但是如果不再使用该应用程序,你不要忘记管理自己以完全关闭它,你不想杀死你的客户电池)。 但是,服务无法在界面上执行操作,因此您可能需要向活动广播消息以命令他们打开对话框。
最后的想法:Toast是好的,但阻止界面的弹出窗口非常糟糕,特别是在移动设备上。