我有一个文件下载应用程序,我需要使用Asnc Task方法更新进度 对话框和通知栏将同时显示进度,就像Google Play中的示例
一样当我运行该方法时,Notification Bar显示极慢的响应。 在ONProgressUpdate中,我只更新了两个UI进度而没有同步化。
当我使用线程休眠来减慢进程时,它运行顺利,但下载速度非常低。
我们如何确保两个UI线程平稳运行,同时保持可接受的快速下载速度?
这是代码
请回答:)
@Override
protected void onProgressUpdate(Integer... values) {
if (values.length>0) {
//Log.d("Download Activity", "progressUpdate:"+values[0]);
if (values[0] < 0) {
this.cancel(true);
showNetworkErrorDialog();
} else {
//size += values[0];
//Log.d("Download Activity", "download size:"+size);
//downloadedGoodListSize += values[0];
//downloadProgressBar.incrementProgressBy(values[0]);
setCurrentProgress(values[0]);
downloadProgressBar.setProgress(values[0]);
double currentProg = downloadProgressBar.getProgress()*1.0/downloadProgressBar.getMax()*100;
//progressTextView.setText( decimalFormat.format(downloadedGoodListSize*1.0/downloadProgressBar.getMax()*100.0)+"%");
progressTextView.setText(decimalFormat.format(downloadProgressBar.getProgress()*1.0/downloadProgressBar.getMax()*100)+"%");
notification.contentView.setProgressBar(R.id.pb, 100, (int)currentProg, false);
nm.notify(notificationID, notification);
}
}
}
@Override
protected void onPostExecute(Boolean result) {
Log.i("Download Activity", "onPostExecute: starting");
downloadProgressBar.setProgress(downloadProgressBar.getMax());
progressTextView.setText(100+"%");
wheelProgressBar.setVisibility(View.GONE);
downloadingTextView.setText(getFinishedText());
notification.contentView.setProgressBar(R.id.pb, 100, 100, false);
nm.notify(notificationID, notification);
nm.cancelAll();
Log.i("Download Activity", "onPostExecute: set interface ok");
finishDialog.show();
}
答案 0 :(得分:1)
您正在更新通知栏,因此响应缓慢。在2-3秒内更新一次,你会没事的。
答案 1 :(得分:0)
以下是我的代码
@Override
protected void onProgressUpdate(Integer... values) {
if (values.length>0) {
//Log.d("Download Activity", "progressUpdate:"+values[0]);
if (values[0] < 0) {
this.cancel(true);
showNetworkErrorDialog();
} else {
//size += values[0];
//Log.d("Download Activity", "download size:"+size);
//downloadedGoodListSize += values[0];
//downloadProgressBar.incrementProgressBy(values[0]);
setCurrentProgress(values[0]);
downloadProgressBar.setProgress(values[0]);
double currentProg = downloadProgressBar.getProgress()*1.0/downloadProgressBar.getMax()*100;
//progressTextView.setText( decimalFormat.format(downloadedGoodListSize*1.0/downloadProgressBar.getMax()*100.0)+"%");
progressTextView.setText(decimalFormat.format(downloadProgressBar.getProgress()*1.0/downloadProgressBar.getMax()*100)+"%");
notification.contentView.setProgressBar(R.id.pb, 100, (int)currentProg, false);
nm.notify(notificationID, notification);
}
}
}
@Override
protected void onPostExecute(Boolean result) {
Log.i("Download Activity", "onPostExecute: starting");
downloadProgressBar.setProgress(downloadProgressBar.getMax());
progressTextView.setText(100+"%");
wheelProgressBar.setVisibility(View.GONE);
downloadingTextView.setText(getFinishedText());
notification.contentView.setProgressBar(R.id.pb, 100, 100, false);
nm.notify(notificationID, notification);
nm.cancelAll();
Log.i("Download Activity", "onPostExecute: set interface ok");
finishDialog.show();
}