对话框没有显示百分比如果我使用了代码
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
int total = msg.arg1;
mProgressDialog.setProgress(total);
if (total >= 100){
try {
mProgressThread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
mProgressThread.setState(ProgressThread.STATE_DONE);
}
}
};
并在线程代码中
while ((count = input.read(data)) != -1) {
total += count;
Message msg = mHandler.obtainMessage();
msg.arg1 = total;
mHandler.sendMessage(msg);
output.write(data, 0, count);
}
怎么了?如果我使用总++;而是总+ =计数;规模提高到19%但不提高到100%。这是因为文件的下载速度比while循环100迭代更快。 如果我使用总+ =计数;它显示0但是文件下载的比例为100%。
答案 0 :(得分:1)
您似乎不会将任何百分比信息传递给处理程序,而是将读取字符的总绝对数量传递给处理程序。当你写总++时;你传递了读取例程接收数据的次数以及写入总数+ =计数的次数;你传递了你在完整的阅读例程中读到的所有字符的总数。
如果要显示百分比,则需要从0到100传递进度。要做到这一点,你需要知道你将读取多少个字符并写入总数+ =计数;并传递total / CountOfAllCharactersToRead。这样你就可以正确地将%-fraction分配给proress对话框。
只是另一个评论。如果您的阅读程序非常快,则可能会发生UI不经常更新,并且您不会看到进度条实际上从0到100运行。