编辑:这是不一样的ProgressDialog doesn't show just flashesProgressDialog只给出了一个即时
我一定要使用AsyncTasks为网络通信和文件操作,表现出不确定,取消ProgressDialog直到任务完成,因为我觉得我应该适当。
在某些情况下 - 移动互联网连接速度慢,老旧的设备不足 - 这可能需要几秒钟的时间。但是完全相同的任务可能会在其他情况下或其他设备上非常迅速地完成,导致ProgressDialog仅显示一小部分时间,基本上在屏幕上闪烁。
这里最好的做法是什么?我可以想到几个选项:
- 保持原样,知道某些用户会产生闪烁效果。
- 即使任务已经完成,强制进度对话框在最小时间(半秒,一秒)内保持可见状态,但我讨厌引入人工延迟的想法。
- 计时任务,并且只显示ProgressDialog,如果任务花费的时间超过最小设定时间(如半秒)。问题是这不是一个真正的解决方案;如果任务在这段时间内完成,那么很棒;如果任务需要很长时间,那么很好 - 但是如果最小时间为0.5秒,而任务实际需要0.7秒,那么你又有同样的问题了......一个短暂的闪烁。
- 如果您可以监控任务的进度,请对其进行简短测试,并从第一小部分或第一个x百分比中估算完成任务需要多长时间;如果预计需要一段时间,则显示ProgressDialog。但是,这将是相当复杂的,并不是每个背景任务都适合这种进度评估。
什么是最佳方法?有没有我错过的选择?有没有办法设置ProgressDialog,所以它只显示是否会有明显的延迟? (我怀疑是否存在,但是如果有一些神奇的方法会很好)。这些是“标准”解决方案之一吗?
没有标准的方法,你有所有正确的想法。显示你的ProgressDialog,然后在一小段延迟(例如100ms)后运行你的AsyncTask并不是一个可怕的方法。你也可以只做一个ProgressBar(即微调),一个比Dialog更小巧的UI元素。 – CSmith 2012-03-02 22:00:48
我同意CSmith,我会考虑把它从dialong中拿出来,然后把它添加到某个地方的UI中。这样就不会发生震动,但在需要时它仍然存在。 – FoamyGuy 2012-03-02 22:08:31