编辑:这与ProgressDialog doesn't show just flashes不同。
我确保在网络通信和文件操作中使用AsyncTasks,并显示一个不定时、可取消的ProgressDialog,直到任务完成,因为我认为我应该这样做。
在某些情况下——比如慢速移动互联网连接、旧的低性能设备——这可能需要几秒钟。但是在其他情况或其他设备上,完全相同的任务可能会非常快速地完成,导致ProgressDialog仅在屏幕上闪烁一瞬间。
这里有最佳实践吗?我能想到几个选项:
1. 保持原样,知道一些用户会有那种闪烁的效果。 2. 强制ProgressDialog在消失之前保持可见的最短时间(半秒、一秒),即使任务已经完成——但我讨厌引入人工延迟的想法。 3. 计时任务,只有当任务花费的时间超过最小设置时间(如半秒钟)时才显示ProgressDialog。问题是这不是真正的解决方案;如果任务花费的时间少于这段时间,则很好;如果任务需要很长时间,则很好——但如果最小时间为0.5秒,而任务实际上需要0.7秒,则又会出现同样的问题……一个短暂的闪烁。 4. 如果您可以监视任务的进度,从前几分之一秒或前x个百分比进行简短的测试和估计,以确定完成任务需要多长时间;如果预计需要一段时间,则显示ProgressDialog。但这将非常复杂,并不是每个后台任务都适合这种进度估算。
哪种方式最好?我错过了什么选项吗?有没有一种方法可以设置ProgressDialog,使其仅在有明显延迟时才显示?(我怀疑有这种神奇的方法)。其中是否有一种“标准”解决方案?
我确保在网络通信和文件操作中使用AsyncTasks,并显示一个不定时、可取消的ProgressDialog,直到任务完成,因为我认为我应该这样做。
在某些情况下——比如慢速移动互联网连接、旧的低性能设备——这可能需要几秒钟。但是在其他情况或其他设备上,完全相同的任务可能会非常快速地完成,导致ProgressDialog仅在屏幕上闪烁一瞬间。
这里有最佳实践吗?我能想到几个选项:
1. 保持原样,知道一些用户会有那种闪烁的效果。 2. 强制ProgressDialog在消失之前保持可见的最短时间(半秒、一秒),即使任务已经完成——但我讨厌引入人工延迟的想法。 3. 计时任务,只有当任务花费的时间超过最小设置时间(如半秒钟)时才显示ProgressDialog。问题是这不是真正的解决方案;如果任务花费的时间少于这段时间,则很好;如果任务需要很长时间,则很好——但如果最小时间为0.5秒,而任务实际上需要0.7秒,则又会出现同样的问题……一个短暂的闪烁。 4. 如果您可以监视任务的进度,从前几分之一秒或前x个百分比进行简短的测试和估计,以确定完成任务需要多长时间;如果预计需要一段时间,则显示ProgressDialog。但这将非常复杂,并不是每个后台任务都适合这种进度估算。
哪种方式最好?我错过了什么选项吗?有没有一种方法可以设置ProgressDialog,使其仅在有明显延迟时才显示?(我怀疑有这种神奇的方法)。其中是否有一种“标准”解决方案?