Как стать автором
Обновить

Комментарии 18

Я просто оставлю это здесь: github.com/serso/android-common/blob/master/http/src/main/java/org/solovyev/android/http/ImageLoaderImpl.java

Реализована возможность работы с любым объектом посредством OnImageLoadedListener, при достижения определённого порога картинки кешируются на карту.

Пример работы можно посмотреть здесь: play.google.com/store/apps/details?id=org.solovyev.android.samples
Я к тому, что ваш ImageGetter можно было свести к:
Я к тому, что ваш ImageGetter можно свести к:
<source lang="java">
new Html.ImageGetter() {
	public Drawable getDrawable(String source)
                   ImageLoader#loadImage(url, new OnImageLoadedListener() {
                    
                       //...
                   
                       void onImageLoaded(@Nullable Bitmap image) {
                            textView.setText(Html.fromHtml(message, image, null));
                       }
                        
                   });
	}
};
Действительно, я в статье специально не стал развивать тему кеширования — тема и цель были другими. Поэтому спасибо за полезную ссылку.
Тут речь идёт о картинках внутри html
Тогда извиняюсь. Просто я прочел заголовок как «загрузка рисунков в TextView» и решил, что это о загрузке рисунков в TextView, а HTML это уже такой своебразный хак в обход нативных методов. Дополнительных условий, что изображение должно быть вперемежку с чем-то еще в тексте не увидел, но если это так, то Вы безусловно правы. Правда, в таком случае я бы подумал об использовании WebView.
Я знаю, точно одно ограничение: WebView нельзя использовать в виджете, а TextView можно (правда я не знаю как поведёт себя такая обработка). Ну, а так — да, конечно, лучше использовать WebView.
А насколько рационально использование WebVew например в Layout'ах для пунктов ListView? Подозреваю (не проверял), что WebView более ресурсоемок, нежели чем TextView.
Здесь говорят, что действительно в ListView лучше использовать TextView вместо WebView.
3 причины почему не следовать вашему примеру: AsyncTask, HTML в TextView и WeakReference для кэша.
Кеш исключительно ради примера был приведен, я отметил это в тексте. Как указал выше уважаемый serso, в некоторых случаях HTML в TextView может быть вполне обоснован (видимо, стоит упомянуть и виджеты). А что плохого вы видите в AsyncTask?
Про кэш я не увидел упоминание о LruCache. HTML, ну может быть. AsyncTask очень зависит от контекста. Я имею ввиду если он будет создан в Activity, то и привязан к instance Activity, как только потеряем instance, потеряем AsyncTask. Я был на конференции Google, разработчик Android советовал данные загружать используя Loaders, прочитайте в документации (если еще не ознакомлены), очень полезная фича.
Да я и не планировал рассуждать об этом в статье, хотелось бы оставить право выбора механизма кэширования читателю. Хотя, в любом случае, спасибо за информацию, она может оказаться кому-то полезной.
За информацию о загрузке данных — отдельное спасибо. Хотя, я и не уверен, что в данном случае есть что-то страшное, ведь как раз здесь и подразумевается работа во время жизни активити.
Кто мешает передавать в AsyncTask вместо Activity — Application?
1. Зачем там Application?
2. Java мешает — ссылка на Activity будет удерживаться классом AsyncTask (если конечно он не статичен)
3. Кто будет держать ссылку на AsyncTask? И зачем, если существует built-in фича для этого AsyncTaskLoader
1. Вы боялись, что у вас «потеряется» instance Activity (не знаю что это значит, но видимо, что у Activity закончится свой lifecycle).
2. Как она будет удерживаться. если я буду использовать WeakReference?
3. AsyncTaskLoader — added in API 11.
1. Да верно, onDestroy будет вызван. Но если нужно будет по onPostExecute обновить UI Activity, instance Activity будет уже не валидный, а получить текущий будет не возможно.
2. WeakReference или что-то другое не имеет значения, если класс extended AsyncTask будет объявлен не static.
3. В чем проблема?Support Library
1. — 2. WeakReference я имел ввиду в другую сторону (как здесь). Ну и собственно, понятно, что создавая внутренний (для Actvity) не статичный класс вы привязываетесь к Activity.this, просто не создавайте таких классов =)
3. OK
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации