一些想法:
- 您不需要
progressBar1
在循环的每次迭代中设置最大值,这是没有意义的,因为bufferSize
在循环内部不会改变。将该命令移到循环之外。
- 试着记住你以前的进步:
prevProgress = (i / mFileLen)
。然后衡量你的新进展:currProgress = (i / mFileLen)
。然后,如果两个进度之间的差异不大于 0.01 (1%),则不要更新 UI:if (currProgress - prevProgress >= 0.01) publishProgress(...);
这是一个例子:
float currProgress = 0;
float prevProgress = 0;
for (int i = 0; i < bufferSize; i++)
{
currProgress = ((float)i / (float) mFileLen);
if (currProgress - prevProgress >= 0.01)
{
publishProgress((int) (currProgress * 100));
prevProgress = currProgress;
}
}
当进度大于 2% (0.02) 而不是 1% (0.01) 等时,您可以通过更新 UI 来使其工作得更快。
另外,我觉得和之间没有真正的相关性i
……mFileLen
你的bufferSize
?是否小于mFileLen
(应该是)。在这种情况下,您应该使用一个单独的变量来计算它使用的整体进度,而不是i
衡量进度。
希望这可以帮助。