我有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();
支持应用
- 备用应用
- Asynctask on going
- Asynctask已完成,progressDialog已被解雇
- (应用程序仍处于待机状态)AlertDialog显示为应该
醇>
主屏幕
- Asynctask on going
- 转到主屏幕
- Asynctask已完成,progressDialog已被解雇
- 调用AlertDialog以显示
- 回到app,但是没有出现alertdialog,而是给了我灰色的屏幕。
醇>
有什么方法可以解决这个问题吗?我试图搜索它,但找不到有人有同样的问题..
答案 0 :(得分:1)
确定。 (从你的评论中)。
当您的应用在后台时,您无法自动显示对话框。如果未显示活动,则对话框将显示在Activity的上下文(及其窗口管理器)中,对话框也不会显示在对话框中。
要在活动处于后台时显示内容,您可以选择一些选项,但不会直接选择。
将视图直接附加到Android的WindowManager
。这不适用于对话框,您必须构建一个对话框布局并手动附加它,它将保持前景,超越其他所有内容。
从透明活动启动对话框。这里的问题是,如果您在主屏幕上说,然后启动透明活动/对话框,然后您调用应用程序透明活动/对话框将被解除到后台。
使用对话框主题启动活动。如果您调用主应用程序保持堆栈正确,则此“可能”将根据需要工作。必须要测试才能确定。
答案 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会终止你的进程。