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

时间:2013-09-13 12:43:50

标签: android

我有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 on going
  4.   
  5. Asynctask已完成,progressDialog已被解雇
  6.   
  7. (应用程序仍处于待机状态)AlertDialog显示为应该
  8.   

主屏幕

  
      
  1. Asynctask on going
  2.   
  3. 转到主屏幕
  4.   
  5. Asynctask已完成,progressDialog已被解雇
  6.   
  7. 调用AlertDialog以显示
  8.   
  9. 回到app,但是没有出现alertdialog,而是给了我灰色的屏幕。
  10.   

有什么方法可以解决这个问题吗?我试图搜索它,但找不到有人有同样的问题..

2 个答案:

答案 0 :(得分:1)

确定。 (从你的评论中)。

当您的应用在后台时,您无法自动显示对话框。如果未显示活动,则对话框将显示在Activity的上下文(及其窗口管理器)中,对话框也不会显示在对话框中。

要在活动处于后台时显示内容,您可以选择一些选项,但不会直接选择。

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

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

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

答案 1 :(得分:0)

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

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

有关AsyncTask的更多信息,请here

有关Notifications的更多信息,请here

Design Guide in question就在这里。向下滚动到“向用户发送通知”。基本上,您在后台使用AsyncTask执行的操作就像运行服务一样。至少从用户体验的角度来看。您的方法和服务之间的差异是内部的,例如当Android需要不同的空间时,Android会终止你的进程。