2017-02-11 3 views
1

Привет, у меня довольно простой код, мои изображения сжаты, поэтому никто не имеет более 50 КБ. Когда я запускаю свое приложение, загружается 1 изображение, а использование памяти - около 42 МБ, но при прокрутке вниз к другим изображениям каждое другое изображение приводит к увеличению использования памяти до 250 МБ. Как это исправить? Вот мой код и, пожалуйста, я начинаю, поэтому попробуйте объяснить это просто.Изображения, занимающие слишком много памяти

import android.content.Context; 
import android.support.v4.view.PagerAdapter; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 


public class CustomSwip extends PagerAdapter { 
private int[] imageResources = {R.drawable.j1, R.drawable.jg2,R.drawable.jg3, R.drawable.jg4, R.drawable.jg5, R.drawable.jg6, R.drawable.jg7, R.drawable.jg8, R.drawable.jg9, R.drawable.jg10, R.drawable.jg11, R.drawable.jg12, R.drawable.jg13, R.drawable.jg14, R.drawable.jg15, R.drawable.jg16}; 
private Context ctx; 
private LayoutInflater layoutInflater; 

public CustomSwip(Context c) { 
    ctx = c; 
} 

@Override 
public int getCount() { 

    return imageResources.length; 
} 


@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View itemView = layoutInflater.inflate(R.layout.activity_custom_swip, container, false); 
    ImageView imageView = (ImageView) itemView.findViewById(R.id.swip_image_view); 
    imageView.setImageResource(imageResources[position]); 
    container.addView(itemView); 
    return itemView; 
} 


@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 

} 


@Override 
public boolean isViewFromObject(View view, Object object) { 

    return (view == object); 
} 

} 
+1

Используйте библиотеку 'Glide' или' Picasso' для загрузки/кеширования изображений. –

+0

Что вы подразумеваете под использование памяти? это память памяти, используемая для вашего приложения в памяти вашего устройства? –

+0

Android Monitor имеет главное окно, содержащее logcat, память, процессор, графический процессор и сетевые мониторы. В этом окне вы можете выбрать процесс работы с устройством и приложением, чтобы завершить работу, завершить приложение, собрать системную информацию dumpsys и создать скриншоты и видео для запуска приложения. Это память из монитора android –

ответ

1

Universal Image Loader является библиотекой по nostra13, которая является довольно хорошо документирована и широко используются и известно для настройки конфигурации обеспечивает для загрузки изображений. В нем есть возможность загружать изображения в RGB_565, что может снизить потребление памяти примерно на половину (практически видели результаты) и многие другие.

Используйте .bitmapConfig (Bitmap.Config.RGB_565) в вариантах отображения. Растровые изображения в RGB_565 потребляют в 2 раза меньше памяти, чем в ARGB_8888.

И загляните в WeakReferences один раз. Это может помочь при вызове сборщика мусора для изображений с интенсивной памятью.

0

Согласно документации для setImageResource,

Это делает чтение Bitmap и декодирование в потоке пользовательского интерфейса, который может вызвать задержку в икоту. Если это проблема, подумайте об использовании setImageDrawable (android.graphics.drawable.Drawable) или setImageBitmap (android.graphics.Bitmap) и BitmapFactory.

Или просто использовать библиотеку загрузки изображений для ленивой загрузки изображений

Смежные вопросы