Как загрузить одно изображение за раз в потоке пользовательского интерфейса Android - PullRequest
0 голосов
/ 18 июля 2011

В настоящее время у меня есть пользовательский интерфейс, который использует класс AsyncTask для вызова веб-службы. Этот вызов получает несколько картинок и сохраняет их в HashMap. Пользовательский интерфейс затем уведомляется, и пользовательский интерфейс создается с этими изображениями. Тем не менее, это иногда занимает 10-15 секунд, что раздражает. Есть ли способ заполнять пользовательский интерфейс по одному изображению за раз фоновой службой, чтобы пользователь начал видеть изображения быстрее, чем они есть в настоящее время?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 18 июля 2011

Вот пример того, как это сделать:

public Void doInBackground(String... urls) {
    int len = urls.length;
    for(int i = 0; i < len; ++i) {
        Bitmap b = downloadImage(urls[i]);
        publishProgress(new Object[] {b, i});
    }
    return null;
}

public void onProgressUpdate(Object... values) {
    Bitmap b = (Bitmap)values[0];
    Integer bitmapIndex = (Integer)values[1];
    //replace the image at location "bitmapIndex" in your collection of images with "b"
    //update your adapter via notifyDataSetChanged
}

Используйте метод AsyncTask onProgressUpdate для публикации прогресса внутри doInBackground. Этот метод (onProgressUpdate) выполняется в потоке пользовательского интерфейса.

1 голос
/ 18 июля 2011

Я не знаю, знаете ли вы об этом, но на всякий случай AsyncTask имеет функцию onProgressUpdate, которую вы могли бы использовать для выполнения операций в потоке пользовательского интерфейса до того, как AsyncTask завершитсязвонит onPostExecute.Из метода doInBackground просто вызовите publishProgress с соответствующими аргументами.

...