java - 安卓对话框管理

标签 java android service dialog android-activity

我正在开发一个 Android 应用程序(如果您想了解更多信息 http://www.txty.mobi),我在对话框管理方面遇到了一些问题。我对 Android 很陌生,所以我做事的方式完全错误。如果是这种情况,请直说,并指出我要遵循的正确文档。

背景:

到目前为止,应用程序的主要 block 是一个 Activity 和一个服务(派生自 IntentService)。 actvity 需要在两种情况下与服务交互:启动/停止服务。 Intent 服务将使用 AlarmManager self 调节其生命周期。

点击开始/停止时的典型流程:

1) onResume 上的 Activity 将广播接收器注册到服务发送的事件(在 onPause 中取消注册)

2) Activity 启动一个不确定的进度对话框

3) Activity 发送单次警报事件(启动或停止),该事件将**直接发送到服务

4) 服务执行启动所需的操作

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

6) Activity 收到此事件并摆脱对话框。

问题:

Activity 可能会失去其前台状态比方说,如果用户切换焦点或接到电话,则调用 onPause 方法(此时 Activity 可能甚至被系统杀死以索取内存)。显然,如果是这种情况, Activity 将永远不会收到其广播事件,因为接收器已注销。这将使应用程序处于尴尬的境地,当 Activity 再次被带到前面时,会有一个您无法终止也永远不会摆脱的对话框。

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

我现在处理这个问题的方法(除了保持广播接收器就位)是创建一个实用程序类,它使用首选项来跟踪正在执行的操作及其状态:

Activity
- 在 onResume 中使用我的实用程序类获取 Activity 正在等待的操作列表
- 检查他们的状态
- 如果它们完成,则相应地执行一些操作(在我的例子中,去掉对话框!)
- 从首选项中删除操作。 - 在请求对服务进行操作之前,它使用我的实用程序类将其保存到首选项。

服务
使用我的实用程序类执行操作并将操作状态保存到首选项。 发出广播。

灾难发生!

现在这在正常情况下救了我,但如果发生灾难(即使用任务 killer 应用程序你杀死一切)服务可能会在它可以保存操作状态之前被杀死我像以前一样卡住( Activity 会认为操作仍在进行,因此不会触及对话框)。所以现在我添加了一个 Dismiss 按钮以防万一:)

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

感谢并抱歉发了这么长的帖子 :P

卢卡

最佳答案

您是否尝试过使用 StickyBroadcast ?这会缓存最新的广播,因此可以在 onResume 上接收它。请看this post .

关于java - 安卓对话框管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3659468/

相关文章:

android - 为什么我应该使用 android 服务而不是 java 线程

java - Is-与参数化引用的关系

android - 使用 Robolectric 在两个(或更多)Android 版本上运行 Android 测试

android - 如何在 android 中从 omxcodec 转储 yuv 缓冲区

android - 如何移除Activity Stack底部的Activity?

android - 将数据传递给 Service 的 onDestroy()

java - 将 JPanel 添加到 JFrame 时遇到问题

java - 为什么我能够直接访问枚举常量作为另一个类中 switch 语句的 case 标签

java - 无法从 HashMap 中以 HttpSession 作为键检索值

web-services - 如何找出我收到 EOSError 代码 5 - Access Denied 注册服务的原因?