2010-09-07 53 views
1

我正在开发一个android应用程序(如果您需要更多信息http://www.txty.mobi),并且在对话管理方面存在一些问题。我对Android很陌生,所以我的做法完全错误。如果是这种情况,请只是这样说,然后指向我要遵循的正确文档。Android对话框管理

背景:

该应用的主要块迄今为止是一个活动和一个服务(从IntentService派生)。 活动只需两次与服务交互:启动/停止服务。意图服务将使用AlarmManager自行调节其使用期限。

的典型流上开始,当点击/停止:

1)它的onResume活性寄存器的广播接收器,以由所述服务发送的事件(注销它在的onPause)

2)活动开始一个不确定的进度对话框

3)的activty发送一个单杆警报事件(无论是启动或停止),将被发送**马上到服务

4)服务做什么需要做的,开始

5)服务发出广播事件基本上说“完成”

6)活动接收此事件并除去对话框。

问题:

活动会失去它的前台状态,比方说,如果用户切换焦点或接收呼叫,因此在onPause方法被调用(在这一点上活动可能甚至是被系统杀死以声称记忆)。显然,如果是这种情况,活动将永远不会收到其广播事件,因为接收方已被注销。这会使应用程序处于尴尬境地,当活动重新回到前台时,会出现一个您无法完成的对话,也永远无法摆脱。

的(可能吗?)解决方案:

我现在处理这个(除了保持到位广播接收器)是由创建使用偏好的工具类,跟踪其操作的方式正在执行及其状态:

活动
- 在的onResume使用我的工具类获取操作的活动正在等待
名单- 检查他们的状态
- 如果他们完成相应的一些行动(在我的情况下摆脱对话!)
- 从首选项中删除操作。 - 就在向服务请求操作之前,使用我的实用程序类将其保存到首选项。

服务
进行操作,并使用我的实用工具类保存操作状态的偏好。 发出广播。

灾难发生!

现在这节省了我在正常情况下,但如果发生灾难(即与任务杀手应用程序,你杀了一切)服务可能会被杀害之前,它可以保存操作的状态我卡住像以前一样该活动将认为操作仍在进行,因此它不会触及对话框)。所以现在我增加一个解雇按钮到非常对话框,以防万一:)

现在所有这些看起来太复杂了,我觉得应该是一个相当普遍的事情。这就是为什么,正如在帖子开头所说的那样,我可能(很可能!)完全错误。
任何想法?道歉,如果这个问题已经被问到,我环顾四周,但没有发现任何东西。请在线向我指出解释这一点的任何资源。

感谢和抱歉lenghty后:P

卢卡

回答

1

您是否尝试过使用StickyBroadcast?这缓存了最新的广播,因此可以收到onResume。请参阅this post

+0

谢谢!形成文档正是我需要摆脱我写的实用课程。我会尽快尝试。 – lucabox 2010-09-07 17:37:47

+0

我的荣幸。请记住接受这个答案,如果它解决了你的问题。 (这会鼓励其他人在未来回答你的更多问题) – 2010-09-07 17:46:57

+0

我终于设法尝试了StickyBroadcast方法,尽管它简化了我的代码(不再需要访问偏好,但以增加一个权限为代价:** BROADCAST_STICKY **)我想我仍然需要在不确定的进度对话框上有一个“Dimiss”按钮,因为(与我的方法一样),如果gets服务被杀死,那么它将不会发送广播,并且UI将被卡住这个对话框nobody将永远删除,使应用程序无法使用。可能我需要添加一个“超时”。我将检查任务杀手级应用程序是否可以终止服务,如果不能,那么我只是过度工程:) – lucabox 2010-09-09 09:18:29