【发布时间】:2015-11-13 22:32:12
【问题描述】:
我正在尝试使用 this library 在 AsyncTask 的 onProgressUpdate() 的活动屏幕上发布进度,该任务用于从 Internet 下载一些数据。他们提供的演示应用程序使用Handler 来演示这一点。我需要在 AsyncTask 中使用它。
以下代码 sn-p 来自他们演示应用程序中的代码。
我的问题是:
-
onProgressUpdate 得到一个参数
Progress... values,并且 根据documentation,它是“指示的值 进步。” 但是 我不明白这意味着什么,以及如何 使用这个论点。在我看到的例子中,他们正在做 类似:progressBar.setProgress(Integer.parseInt(values[0]));为什么他们只使用传递数组中的第一个值 (值[0])?
-
AsyncTask如何知道完成需要多长时间 下载操作。我想显示 ProgressBar 的进度 完成下载所用时间的值 0 到 100 手术。通过
progressBarDeterminate.setVisibility(View.VISIBLE)inonPreExecute和做progressBarDeterminate.setVisibility(View.GONE)在onPostExecute,我们确保它仅在数据出现时显示 正在下载,但我们如何确保它从 开始位置到最终位置 下载数据(当我们不知道它到底有多长时 去下载数据)?
来自演示示例的代码(它使用 Handler,但我需要在 AsyncTask 中执行此操作)
public class MainActivity extends AppCompatActivity {
ProgressBarDeterminate progressBarDeterminate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBarDeterminate = (ProgressBarDeterminate) findViewById(R.id.progressDeterminate);
progressTimer.start();
}
Thread progressTimer = new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0; i <= 100; i++){
try {
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.sendMessage(new Message());
}
}
});
Handler handler = new Handler(new Handler.Callback() {
int progress = 0;
@Override
public boolean handleMessage(Message msg) {
progressBarDeterminate.setProgress(progress++);
return false;
}
});
}
【问题讨论】:
标签: android android-asynctask progress-bar handler async-onprogressupdate