1

我已阅读其他窗口泄漏帖子,并尝试了那里的建议无济于事。

我有 3 个活动:A、B 和 C。活动 A 从用户那里收集信息。Activity B 在与另一个线程上的服务器通信时显示一个旋转的 ProgressDialog。当线程完成时,它会关闭 ProgressDialog 并开始下一个活动。活动 C 将来自服务器的信息显示给用户。Activity B 的设置使得当用户从 C 回击时,他们会退回到 A。

这些任务必须在单独的活动中进行,这一点很重要。

到目前为止,应用程序在大多数情况下都成功地完成了它应该做的事情,除了以下情况:如果用户在活动 C 中更改方向,然后返回到活动 A,应用程序由于窗口泄漏而崩溃。

  • 在 istart C 之前,我正在关闭 Activity B 的 onPause() 中的 ProgressDialog。
  • 我尝试使用处理程序以及在单独的线程中关闭主线程上的 ProgressDialog。
  • 当用户不改变 C 中的方向时,不会发生窗口泄漏。

有任何想法吗?TIA

4

3 回答 3

0

这经常发生在使用 ProgressDialogs 的地方。不久前我对 ProgressDialog 进行了试验,发现要做的事情是从 onPause() 中将其关闭并从 onResume() 中重新创建它。后台任务显然需要在您的 Activity 和对话框中存活,所以我使用 onRetainNonConfigurationInstance() 将任务实例从被破坏的 Activity 传递给新的。

另一种欺骗性的解决方法可能是简单地防止您的 Activity 仅仅因为屏幕方向发生变化而被破坏并重新创建。通过将 android:configChanges="orientation" 添加到 AndroidManifest.xml 中的标记来执行此操作。

于 2010-10-19T08:53:33.663 回答
0

我通过完全改变我处理所有事情的方式解决了我的问题。我现在只有两个活动(A 和 B),并在活动 B 中显示 ProgessDialog,同时根据需要处理 savedInstanceState 以解决问题。

即使我已经解决了我的应用程序上的问题,我仍然不知道它之前为什么会发生,并且想了解更多关于窗口泄漏以及为什么我遇到问题的信息。如果有人知道我遇到的问题的更多信息,请发布,因为我相信还有其他人有同样的问题。

谢谢

于 2010-10-22T04:27:33.823 回答
0

不确定这是否与您的特定问题有关,但我有一个类似的问题,这与在活动的 onCreate 方法中创建的对话框的泄漏窗口有关。因此,如果您的活动开始显示一个对话框,并且您进行了配置更改,操作系统会记住显示了哪些对话框,因此当活动被杀死并重新启动时,操作系统会尝试恢复您的旧对话框,而您的活动会尝试显示相同的对话框再次对话框(因为它在 onCreate 中)。如果不是配置更改(即savedInstanceState!= null),我发现仅在onCreate期间显示对话框,泄漏窗口问题就消失了。

于 2011-09-28T18:38:35.497 回答