Я собираю миниатюры с веб-сервера в AsynTask для каждого класса, который я создаю по мере его создания. Для этой конкретной проблемы я показываю миниатюру и некоторые свойства текста в ListView.Поиск изображений медленный
Проблема в том, что она очень медленная. Я решил сохранить каждое изображение на устройстве в первый раз, когда это необходимо, а затем в другое время я мог бы просто извлечь его из базы данных. Я не уверен, что это идеально или нет, потому что изображение может быть обновлено или не обновляться на сервере. По-моему, я считаю, что лучше всегда захватывать изображения «на лету», если есть новые, которые нужно захватить.
Я хотел бы получить некоторые предложения от всех вас прекрасных людей об этом.
Примечание: Я также попытался получить изображения в адаптере ListView, но 1) он получает каждое изображение каждый раз, когда прокручивается ListView, и 2) он невероятно глючит, потому что, поскольку каждое изображение загружается, я могу смотреть изображения появляются в неправильном элементе списка, а затем он волшебным образом исправляет себя через некоторое время. Это было совсем не так, поэтому я переместил код в класс.
Буду признателен за любые советы, которые бросили мой путь.
Вот геттер для изображения, которое живет в классе. Это отлично работает после того, как изображение загружено в первый раз, но не так хорошо во время этого первоначального запуска.
public Bitmap GetThumbnail_xlarge() throws Exception {
if(_thumbnail_xlarge == null) {
if(_thumbnailBasePath != null) {
try {new DownloadImageTask(_thumbnail_xlarge).execute(_thumbnailBasePath + "/portrait_xlarge." + _thumbnailExtension); }
catch (Exception e) {} //TODO: The extension could be incorrect. Do nothing for now.
}
else{ throw new Exception("You must set the thumbnail path before getting the image"); }
}
return _thumbnail_xlarge;
}
И вот этот класс, который выполняет эту работу. Обратите внимание, что это частный класс внутри класса, где живет свойство изображения:
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
Bitmap bmImage;
public DownloadImageTask(Bitmap bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) { _thumbnail_xlarge = result; }
}
Я не могу думать ни о чем другом, что может иметь отношение в это время. Пожалуйста, спросите меня, если необходимо, и заблаговременно заблаговременно!
Спасибо за целую кучу информации! – firstTimeJavaUser
Рад, что я помог вам –