【问题标题】:Android-How to wait for AlertDialog check?Android-如何等待 AlertDialog 检查?
【发布时间】:2013-01-19 14:36:28
【问题描述】:

我正在使用AlertDialog.Builder 创建一个AlertDialog 并显示它。显示后,我需要暂停应用程序,直到用户确认对话框。

我确实需要在一个显示Dialog线程的方法中暂停,因为它的调用方法在返回后会抛出一个致命错误。

有什么办法吗?

【问题讨论】:

  • “显示后,我需要暂停应用程序,直到用户确认对话框”——Android 中没有这样的概念。 “我确实需要暂停显示对话框线程的方法”——对话框在 Android 中没有线程。所有 UI,无论是活动还是对话框,都通过主应用程序(“UI”)线程呈现。 “因为它的调用方法在返回后会抛出致命错误”——大概是您的应用程序中有一个需要修复的错误。也许您应该考虑编辑您的问题,提供“致命错误”的堆栈跟踪以及相关的代码部分。
  • 请在问题中附上您的代码

标签: android error-handling dialog android-alertdialog


【解决方案1】:

在 Android 中,您不能暂停 UI 线程,因为它会导致操作系统在暂停大约 5 秒后显示Application is not responding 对话框。

另外,正如 CommonsWare 在 cmets 中提到的,对话框不在单独的线程中运行。

如果没有看到您的代码,有点难以回答,但我现在可以建议将您需要“暂停”的所有代码放在 AsyncTask 中。

您可以将所有代码放在 onPreExecute() 方法中的暂停之前,而不是显示您的对话框,并在 doInBackground() 方法中,可能在一个 while 循环或带有 volatile 变量或其他东西的东西中(此代码在后台线程,因此它不会卡住 UI 线程),然后是 onPostExecute() 方法中暂停后的代码。 onPreExecute()onPostExecute() 都在 UI 线程上运行。 onPostdoInBackground 完成后调用。

但同样,如果您显示一些暂停代码,它会更容易为您提供帮助。

延伸阅读:AsyncTask

【讨论】:

    【解决方案2】:

    另一种处理方法是使用线程。在非 UI 线程中,使用 ActivityrunOnUiThread() 方法调用 AlertDialogshow() 方法。在你的非 UI 线程中调用Object.wait(),在你的AlertDialogOnClickListener 中调用Object.notifyAll()。然后,非 UI 线程将等到用户点击您的 AlertDialog

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      相关资源
      最近更新 更多