Я пытаюсь использовать эту библиотеку для публикации хода выполнения на экране Activity в onProgressUpdate()
AsyncTask, который используется для загрузки некоторых данных из Интернета. Демонстрационное приложение, которое они предоставили, использует Handler
для демонстрации этого. Мне нужно использовать его в AsyncTask.
Следующий фрагмент кода взят из кода их демо-приложения.
Мои вопросы:
onProgressUpdate получает аргумент
Progress... values
и согласно документации, это «значения, указывающие на прогресс». Но я не понимаю, что это значит и как мне использовать этот аргумент. В примерах, которые я видел, они делают что-то вроде:progressBar.setProgress(Integer.parseInt(values[0]));
Почему они используют только первое значение в переданном массиве (значения[0])?
Откуда
AsyncTask
знает, сколько времени потребуется для завершения операции загрузки. Я хочу показать прогресс ProgressBar от значения 0 до 100 в течение времени, затраченного на завершение операции загрузки.Выполняя
progressBarDeterminate.setVisibility(View.VISIBLE)
вonPreExecute
и выполняяprogressBarDeterminate.setVisibility(View.GONE)
вonPostExecute
, мы гарантируем, что они будут отображаться только тогда, когда данные загружаются, но как мы можем гарантировать, что они перемещаются из начальной позиции в конечную в течение времени, которое требуется для загрузки данных (когда мы точно не знаем, сколько времени потребуется для загрузки данных) ?
КОД ИЗ ДЕМО ПРИМЕРА (используется обработчик, но мне нужно сделать это в 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;
}
});
}