2

Я использую класс posted on StackOverflowПолучение OutOfMemoryError на CircularImageView

, и я только что OutOfMemoryError:

Давать StackTrace:

android.view.InflateException: Binary XML file line #15: Error inflating class at android.view.LayoutInflater.createView(LayoutInflater.java:626) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) at android.view.LayoutInflater.inflate(LayoutInflater.java:498) at android.view.LayoutInflater.inflate(LayoutInflater.java:398) at com.flunny.fragments.amici.TrovaAmiciFragment$TrovaAmiciAdapter.getView(TrovaAmiciFragment.java:158) at android.widget.AbsListView.obtainView(AbsListView.java:2608) at android.widget.ListView.makeAndAddView(ListView.java:1852) at android.widget.ListView.fillDown(ListView.java:682) at android.widget.ListView.fillGap(ListView.java:646) at android.widget.AbsListView.trackMotionScroll(AbsListView.java:6592) at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:5575) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:791) at android.view.Choreographer.doCallbacks(Choreographer.java:591) at android.view.Choreographer.doFrame(Choreographer.java:560) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:777) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:5419) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.constructNative(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:417) at android.view.LayoutInflater.createView(LayoutInflater.java:600) ... 25 more Caused by: java.lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:596) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:832) at android.content.res.Resources.loadDrawable(Resources.java:2988) at android.content.res.TypedArray.getDrawable(TypedArray.java:602) at android.widget.ImageView.(ImageView.java:131) at com.flunny.resources.CircularImageView.(CircularImageView.java:33) at com.flunny.resources.CircularImageView.(CircularImageView.java:29) ... 28 more

XML # 15 является:

<com.flunny.resources.CircularImageView 
    android:id="@+id/circularImageView1" 
    android:layout_width="@dimen/trovaAmiciImmagineAltezza" 
    android:layout_height="@dimen/trovaAmiciImmagineAltezza" 
    android:layout_centerVertical="true" 
    android:src="@drawable/sconosciuto" /> 

CircularImageView # 33 и # 29:

public CircularImageView(Context context, AttributeSet attrs) { 
    this(context, attrs, R.attr.circularImageViewStyle); // 29 
} 

public CircularImageView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); // 33 
................ 

изображение не был установлен, он упал до (или нет?). Изображение по умолчанию (@ drawable/sconosciuto) имеет 2,9kb (111px x 111px).

И остальные образы загружаются ImageLoader, но они не более 20 кб

Спасибо заранее.

+0

Вы используете пример кода> –

+1

размер на диске не имеет значения. Важна ширина и высота изображения. Растровое изображение требует ** ширины * высоты * 4 ** байта для хранения в памяти. – Blackbelt

+0

@blackbelt (111px x 111px), я не использовал для загрузки изображений размером более 500 пикселей шириной –

ответ

0

Прикладные программы получают память размера кучи во время их создания. Вы получили ошибку outofmemory, потому что ваш heapsize превысил предоставленную системой. Чтобы этого избежать, вам нужно масштабировать изображение (изменить размер загружаемого в память растрового изображения), а затем манипулировать им. Обратите внимание, что растровое изображение потребляет больше памяти, чем файл, из которого они загружены, потому что в файловой системе они сжаты, но у них нет. Альтернативно, не очень хорошая практика, но вы можете запросить больший размер кучи по android: largeHeap = "true" в true.

+0

Извините, это похоже на ответ «скопировать-вставить». Я сказал, что он имеет небольшой размер (111x111 px <это большой размер?), И я манипулирую им с ImageLoader. –

+0

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

1

Может быть, вы используете вид списка, и вы инициализацией вам вид изображения снова и снова

public View getView(int position, View convertView, ViewGroup parent) { 

     View listitem = convertView; 
     int pos = position; 

     if (convertView == null) { 
      /** Inflating the List Item below */ 

      /** Getting the Image View of Listitem below */ 
      textOfRank = (TextView) listitem 
        .findViewById(R.id.textview_of_Rank); 
      textOfErrors = (TextView) listitem 
        .findViewById(R.id.textview_of_Errors); 
      textOfMode = (TextView) listitem 
        .findViewById(R.id.textview_of_Mode); 
      textOfTime = (TextView) listitem 
        .findViewById(R.id.textview_of_Time); 

     } 
} 

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

+0

Я думаю, что это проблема, похоже, у вашего списка есть проблемы с заполнением кучи. Исследуйте эту часть кода – Sulfkain

+0

Привет, да, мне нужно загрузить ее снова, потому что состояние изменяется (представьте себе запрос друга Facebook: я принимаю, он загружается, «Вы друг», поэтому мне нужно загружать его каждый раз. Что мне делать? тогда? –

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