0

我正在运行 asynctask,完成后,我关闭 progressDialog 并相应地调用 AlertDialog:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Test")
    .setCancelable(false)
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {

    }
});
AlertDialog alert = builder.create();
alert.show();

在应用程序上待机

  1. 应用程序待机
  2. 正在进行的异步任务
  3. Asynctask 已完成,progressDialog 已关闭
  4. (应用程序仍处于待机状态)AlertDialog 应有的显示

主屏幕

  1. 正在进行的异步任务
  2. 转到主屏幕
  3. Asynctask 已完成,progressDialog 已关闭
  4. 调用 AlertDialog 来显示
  5. 回到应用程序,但警报对话框没有出现,它给了我灰色的屏幕。

有没有办法解决这个问题?我试图搜索它,但找不到有人有同样的问题..

4

2 回答 2

1

好的。(根据您的评论)。

当您的应用程序在后台时,您不能让您的对话框自动出现。如果活动没有显示,对话框也将显示在您的活动上下文中(连同它的窗口管理器),您的对话框也没有。

要在您的活动在后台显示内容时,您有几个选项,但没有一个是直截了当的。

  1. 将视图直接附加到 Android 的WindowManager. 这不适用于对话框,您必须构建对话框布局并手动附加它,它将保持前景高于其他所有内容。

  2. 从透明活动中启动您的对话框。这里的问题是,如果您在主屏幕上说,然后透明活动/对话框启动,然后您调用您的应用程序,透明活动/对话框将被解除到后台。

  3. 启动带有对话主题的活动。如果您调用主应用程序以保持堆栈正确,则此“可能”会根据需要工作。必须测试才能确定。

于 2013-09-13T13:42:26.460 回答
0

根据 Android 设计指南,当 AsyncTask 完成并且 Activity 处于后台(暂停)时,您应该显示通知而不是 AlertDialog。要决定应该显示什么,请在 Activity 中维护一个布尔变量。将变量设置为 true inActivity.onResume()和 false in Activity.onPaused()

基本上你onPostExecute在你的AsyncTask. 在那里,您使 ProgressBar 不可见,并使用您在问题中显示的代码显示警报对话框。

更多关于AsyncTask这里

更多关于Notifications这里

有问题的设计指南在这里。向下滚动到“向用户发送通知”。本质上,你在后台使用 AsyncTask 就像运行一个服务。至少从用户体验的角度来看。您的方法和服务之间的差异是内部的,例如,当它需要不同的空间时,Android 会终止您的进程。

于 2013-09-13T13:48:13.433 回答