Задать вопрос
dllweb
@dllweb

Запоздалое перестраивание изображений в ListView через ImageLoader, Как исправить?

Имеется список основанный на ImageLoader его конфиг в кастомном адаптере имеет вид

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getContext())
             .memoryCacheExtraOptions(480, 800) // width, height
             .threadPoolSize(5)
             .threadPriority(Thread.MIN_PRIORITY + 2)
             .denyCacheImageMultipleSizesInMemory()
             .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // 2 Mb 
             .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
             .build();
             
             imageLoader.init(config);
             
             
             imageLoader.displayImage(models.getImg(), holder.imageView);


А вот так заполняется адаптер в основном Activity

@Override
    protected void onCreate(Bundle savedInstanceState) {
		
		
		StrictMode.enableDefaults();
		
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        TextView tv = (TextView) findViewById(R.id.answer);
        ListView lv = (ListView) findViewById(R.id.list);
        
        data = request.doInBackground();
        
        try {
			
        	JSONArray json = new JSONArray(data);
	
			for(int i=0; i < json.length(); i++){
				
				
				 modelrow = new Models(	 
						 json.getJSONObject(i).getString("id").toString(),
						 json.getJSONObject(i).getString("model").toString(), 
						 "http://example.com"+json.getJSONObject(i).getString("preview").toString()
						 			  );
				
				 fetch.add(modelrow);
	
			}
			
			adapter = new ModelAdapter(MainActivity.this, R.id.list, fetch);
			lv.setAdapter(adapter);
			
			
		} catch (JSONException e) {

			e.printStackTrace();
		}


Друзья, поясню ещё раз, проблема в том что, при открытии этого приложения, загружается список вида

wokcBBQzzMo.jpg

При прокрутке этого списка, изображения начинают не соответствовать моделям, только спустя 1-2 секунды подгружаются нужные. Как такое можно исправить, вот пожалуйста лог рабочего состояния из LogCat

08-01 00:20:54.287: D/dalvikvm(1291): GC_FOR_ALLOC freed 316K, 15% free 4004K/4708K, paused 22ms, total 24ms
08-01 00:20:54.687: W/ImageLoader(1291): Try to initialize ImageLoader which had already been initialized before. To re-init ImageLoader with new configuration call ImageLoader.destroy() at first.
08-01 00:20:54.697: W/ImageLoader(1291): Try to initialize ImageLoader which had already been initialized before. To re-init ImageLoader with new configuration call ImageLoader.destroy() at first.
08-01 00:20:54.717: W/ImageLoader(1291): Try to initialize ImageLoader which had already been initialized before. To re-init ImageLoader with new configuration call ImageLoader.destroy() at first.
08-01 00:20:55.287: D/dalvikvm(1291): GC_FOR_ALLOC freed 298K, 16% free 3996K/4708K, paused 24ms, total 24ms
08-01 00:20:55.587: D/dalvikvm(1291): GC_FOR_ALLOC freed 307K, 19% free 3854K/4708K, paused 24ms, total 25ms
08-01 00:20:55.597: I/Choreographer(1291): Skipped 62 frames!  The application may be doing too much work on its main thread.
08-01 00:20:55.817: I/Choreographer(1291): Skipped 46 frames!  The application may be doing too much work on its main thread.


Каким образом можно это исправить?
  • Вопрос задан
  • 2833 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
@pod_proteinom
у меня та же проблема... Единственное решение, которое я пока что нашел(не самое лучшее как по мне) это обнуление view перед загрузкой (.resetViewBeforeLoading(true)) и добавление картинки заглушки(.showImageOnLoading())
Ответ написан
Комментировать
anyd3v
@anyd3v
Что на счет: кеш в памяти, использование ресурса который показывается во время загурзки?

(на счет кеша ин мемори на сколько я знаю по дефолты отключено и .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) не включит его, надо в опциях устанавивать .cacheInMemory(true).cacheOnDisk(true))

Опоздания все равно будут тк время на работу с битмапами занимает какое то время.

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder надо вынести в Application#onCreate (тк это глобальные настройки)
Ответ написан
@Copperfield
Android dude
Попробуйте добавить .resetViewBeforeLoading(true) в билдер опций.
Ответ написан
aratj
@aratj
программер.
так сам адаптер покажите.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы