Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 主屏幕导致灰色屏幕时显示对话框_Android - Fatal编程技术网

Android 主屏幕导致灰色屏幕时显示对话框

Android 主屏幕导致灰色屏幕时显示对话框,android,Android,我正在运行asynctask,完成后,我将关闭progressDialog并相应地调用AlertDialog: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Test") .setCancelable(false) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public

我正在运行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();
应用程序上的Standy

  • 待机应用程序
  • 正在进行的任务
  • Asynctask已完成,progressDialog已取消
  • (应用程序上仍处于待机状态)AlertDialog按应有状态显示
  • 主屏幕

  • 正在进行的任务
  • 转到主屏幕
  • Asynctask已完成,progressDialog已取消
  • 调用AlertDialog以显示
  • 返回应用程序,但alertdialog并没有出现,而是显示灰色屏幕
  • 有什么办法解决这个问题吗?我试图搜索它,但找不到有相同问题的人。

    好的。(根据你的评论)

    当应用程序处于后台时,无法自动显示对话框。如果未显示活动或对话框,则对话框将显示在活动的上下文中(及其窗口管理器)

    要在活动处于后台时显示内容,您有几个选项,但其中没有一个选项是直接显示的

  • 将视图直接附加到Android的
    WindowManager
    。这将不适用于对话框,您必须构建一个对话框布局并手动附加它,它将保持在前景之上

  • 从透明活动启动对话框。这里的问题是,如果您在主屏幕上说,那么透明活动/对话框将启动,然后您将调用您的应用程序。透明活动/对话框将被取消到后台

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


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

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

    有关
    AsyncTask
    的更多信息

    有关
    通知的更多信息


    电话在这里。向下滚动至“向用户发送通知”。本质上,在后台处理AsyncTask就像运行一个服务。至少从用户体验的角度来看。您的方法和服务之间的差异是内部的,例如,当您的流程需要不同的空间时,Android会终止您的流程。

    您是否可以编辑您的问题,以包含您获得灰色屏幕所需的确切流程。我编辑了我的问题,希望现在更清楚。你希望你的AlertDialog在你的应用程序不在前台时出现,还是在你的应用程序返回前台时简单地显示?嗯,实际上我能期望的是,无论我在前台还是后台,对话框都会出现。当然,我可以添加一些逻辑,使其在恢复时出现,但我想我可以期望在后台显示对话框,不是吗?所以我假设没有“简单”的方法来实现这一点?我想我想再次重新设计我的应用程序:D谢谢Jug6ernat!不改变你的想法是不容易的。这里的问题是你试图违背安卓用户界面的生命周期。(当你按下home(主页)按钮时,它应该返回主页)。这是可以做到的,但需要一些难看的意大利面代码。嗯,你能给我提供指南的链接吗?我似乎只能找到这些信息:“持续通知让用户了解后台正在进行的流程。”@Rendy。刚刚意识到我把你的名字弄错了。与此同时,我在我的答案中添加了一个与指南的链接。