【问题标题】:Activity has leaked window?Activity有泄露窗口?
【发布时间】:2014-07-16 13:00:01
【问题描述】:

一旦有人购买了我们的应用程序,我就在该类中有一个 java 类,然后它将开始下载,并且必须出现进度对话框,而不是转到其他页面,当我退出应用程序并重新启动时它开始下载。 请帮我摆脱这个烂摊子...

谢谢

【问题讨论】:

  • 泄漏的窗口是由于没有关闭创建它的窗口(即Activity)中的对话框造成的。需要注意的是,如果您的下载被取消,那么onPostExecute()根本不会运行,这意味着您应该将 pDialog.dismiss() 放在您的 onCancelled() 覆盖中。
  • 现在取消后仍然显示错误以及新错误已到达 07-16 18:59:44.261: E/AndroidRuntime(7452): java.lang.IllegalArgumentException: View not attach to window manager 07-16 18:59:44.261: E/AndroidRuntime(7452): 在 cdl.shrihanuman3d.DownloadActivity$DownloadAsyncTask.onCancelled(DownloadActivity.java:486) 07-16 18:59:44.261: E/AndroidRuntime(7452): 在android.os.AsyncTask.onCancelled(AsyncTask.java:404) 07-16 18:59:44.261: E/AndroidRuntime(7452): 在 android.os.AsyncTask.finish(AsyncTask.java:629)
  • 我刚刚注意到您的代码存在一个非常大的问题。您有两个名为 pDialog 的内部变量。一个在您的DownloadActivity 中,一个在您的DownloadAsyncTask 中。基本上,删除 Activity 中对 pDialog 的所有引用。您应该从 AsyncTask 中创建和销毁 AlertDialog
  • 我很抱歉,但没有一个小的解决办法。您对进度对话框的引用真的很混乱,所以我能提出的最好建议是完全删除它。一旦您的代码没有引发泄漏错误,请返回并仅在 AsyncTask 中创建和销毁进度对话框。

标签: android android-activity android-asynctask progressdialog onresume


【解决方案1】:

在显示之前检查对话框的条件。

这样

if(pDialog!=null)
{
  if(!pDialog.isShowing())
{
pDialog.show();
}
}

并且在删除onPostexecute() 中的对话框时检查是否为空。

如果仍然不起作用,只需删除 pDialog 并使用您的代码尝试一次。

【讨论】:

    【解决方案2】:

    发生错误的两个原因:

    1. 如果您在退出 Activity 后尝试显示 Dialog,则会发生错误。

    2. 此外,如果在您的 AsyncTask 中引发了未处理的异常,这将导致 Activity 关闭,那么打开的进度对话框将导致 Exception

    根据您发布的日志,错误发生在您致电pDialog.show() 之后,这可能是我之前提到的第一个原因。

    此外,您在代码的许多部分都调用了finish(),也许其中一个调用使您的Activity 停止并泄露了您的Dialog

    在显示Dialog 之前,您必须检查其中哪一个正在完成您的Activity。一个好的解决方案是在调用 finish() 之前关闭 Dialog(如果它正在显示)。

    【讨论】:

    • 那么基本上这个问题的解决方法是什么?
    • @Mehdi1991 正如我所说,您正在通过调用finish() 完成代码的许多部分的活动,这可能会导致错误。在显示Dialog 之前,您必须检查其中哪一个正在完成您的Activity。知道了?一个好的解决方案是在调用 finish() 之前关闭 Dialog
    • 谢谢你,我的朋友,但仍然错误仍然存​​在::::仍然得到同样的错误........
    猜你喜欢
    • 1970-01-01
    • 2014-03-16
    • 2016-06-26
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多