2014-11-13 1 views
0

Я хочу разработать приложение, подобное приложению facebook. (** (т. е.) ** Загрузка изображений, Тексты, Видео в элементе списка с бесконечными строками списка). Здесь я показываю дискретизированное изображение (inSamplesize = 4) в элементе listview, чтобы уменьшить использование размера кучи.Размер кучи увеличился при прокрутке в Listview Android

На этот раз размер кучи увеличивается при прокрутке списка. Я предполагаю, что это из-за объекта изображения в элементе списка не переработано. Если размер кучи продолжает увеличиваться, может возникнуть вероятность исключения OOM (вне памяти). Как достичь этой концепции и обеспечить вероятность исключения OOM меньше ?.

+0

Проверьте, сохраняете ли вы какие-либо ссылки на большие объекты, такие как растровые изображения или медиаплеер, если это так, чтобы найти способ эффективно обрабатывать их как кеширование. –

+0

необходимо загружать изображения. Попробуйте это https://github.com/aalap-shah/Android-Image-Loader – Spynet

ответ

1

Убедитесь, что вы используете view holder шаблон в вашем listview'sadapter:

http://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.html

Или сделать некоторые погуглите, в основном все приложения должны следовать этому образцу.

+0

Привет, если мы используем шаблон зрителя, представление не будет воссоздано, если convertview не равно null. Я понял эту концепцию. Но если есть 1000 строк, зритель также сохранит ссылку на просмотр, и размер кучи будет увеличиваться правильно? –

+0

@JayaprakashMarshal да, размер кучи все равно будет больше, но намного меньше, если вы раздуваете представления для каждой строки. Сначала попробуйте, я сделал несколько приложений с длинным списком, отлично работает. –

+0

уверен, что пламя. Я боюсь, если он пересечет предел кучи. я попробую. –

0
  1. Повторное использование convertView в getView() listadapter должно решить исключение OOM.

    public View getView(int position, View convertView, ViewGroup parent) { 
    
        if (convertView == null) { 
         convertView = mInflater.inflate(R.layout.yourlayout, null); 
        } 
    
        ImageView iv = (ImageView) convertView.findViewById(R.id.image); 
        iv.setImageResource(R.drawable.image); 
        return convertView; 
    } 
    
  2. Использование ViewHolder с выше будет делать скроллинг быстро

    static class ViewHolder { 
        private ImageView imageView; 
    } 
    
    public View getView(int position, View convertView, ViewGroup parent) { 
    
        ViewHolder holder; 
    
        if (convertView == null) { 
         convertView = mInflater.inflate(R.layout.yourlayout, null); 
         holder = new ViewHolder(); 
         holder.imageView = (ImageView) convertView.findViewById(R.id.image); 
         convertView.setTag(holder); 
        } 
        else { 
         holder = (ViewHolder) convertView.getTag(); 
        } 
    
        holder.ImageView.setImageResource(R.drawable.image); 
        return convertView; 
    } 
    
+0

Размер кучи увеличивается, когда мы используем тип зрителя. –

0

Не использовать очень большие изображения, размер, если и отображение изображений в списке для превью только размер их в соответствии к вашему пользовательскому интерфейсу. Приложения для Android получают меньше 20 МБ для его выполнения, поэтому использование больших изображений превышает доступную память.

и добавить android:largeHeap="true" в теге приложения вашего манифеста.

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