I am using a ViewPager
with a PagerAdapter
to show one ImageView
per page. The images are full screen but they are not even that large: 120-320 kb per picture and 720 x 940 px resolution
.
My code is supposed to destroy the ImageView
when changing pages. I am getting the Out of Memory
error after when loading the 4th picture every time and crashes my app.
Why am I getting this Out of Memory error?!
My Pager Adapter
public class AvatarPickerPagerAdapter extends PagerAdapter {
@Override
public void destroyItem(View collection, int position, Object o) {
View view = (View)o;
((ViewPager) collection).removeView(view);
view = null;
}
@Override
public void finishUpdate(View arg0) {
}
@Override
public int getCount() {
return avatars.length;
}
@Override
public Object instantiateItem(View context, int position) {
ImageView avatar = new ImageView(getActivity());
// imageView.findViewById(R.id.avatar);
avatar.setImageDrawable(context.getResources().getDrawable(avatarResources[position]));
// imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(), avatarResources[position]));
((ViewPager) context).addView(avatar);
return avatar;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((ImageView)object);
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View arg0) {
}
}
Stack Trace
06-03 15:11:56.656: E/dalvikvm-heap(14156): Out of memory on a 10828816-byte allocation.
06-03 15:11:56.656: I/dalvikvm(14156): "main" prio=5 tid=1 RUNNABLE
06-03 15:11:56.656: I/dalvikvm(14156): | group="main" sCount=0 dsCount=0 obj=0x412fc6a0 self=0x412e3c18
06-03 15:11:56.656: I/dalvikvm(14156): | sysTid=14156 nice=0 sched=0/0 cgrp=apps handle=1074821200
06-03 15:11:56.656: I/dalvikvm(14156): | schedstat=( 0 0 0 ) utm=443 stm=124 core=0
06-03 15:11:56.666: I/dalvikvm(14156): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
06-03 15:11:56.666: I/dalvikvm(14156): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:592)
06-03 15:11:56.666: I/dalvikvm(14156): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:445)
06-03 15:11:56.666: I/dalvikvm(14156): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:781)
06-03 15:11:56.666: I/dalvikvm(14156): at android.content.res.Resources.loadDrawable(Resources.java:1963)
06-03 15:11:56.666: I/dalvikvm(14156): at android.content.res.Resources.getDrawable(Resources.java:672)
06-03 15:11:56.666: I/dalvikvm(14156): at com.walintukai.lfdate.AvatarPickerFragment$AvatarPickerPagerAdapter.instantiateItem(AvatarPickerFragment.java:143)
06-03 15:11:56.666: I/dalvikvm(14156): at android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:110)
06-03 15:11:56.666: I/dalvikvm(14156): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:832)
06-03 15:11:56.666: I/dalvikvm(14156): at android.support.v4.view.ViewPager.populate(ViewPager.java:1048)
06-03 15:11:56.666: I/dalvikvm(14156): at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
06-03 15:11:56.666: I/dalvikvm(14156): at android.support.v4.view.ViewPager$3.run(ViewPager.java:244)
06-03 15:11:56.676: I/dalvikvm(14156): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
06-03 15:11:56.676: I/dalvikvm(14156): at android.view.Choreographer.doCallbacks(Choreographer.java:555)
06-03 15:11:56.676: I/dalvikvm(14156): at android.view.Choreographer.doFrame(Choreographer.java:524)
06-03 15:11:56.676: I/dalvikvm(14156): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
06-03 15:11:56.676: I/dalvikvm(14156): at android.os.Handler.handleCallback(Handler.java:615)
06-03 15:11:56.676: I/dalvikvm(14156): at android.os.Handler.dispatchMessage(Handler.java:92)
06-03 15:11:56.676: I/dalvikvm(14156): at android.os.Looper.loop(Looper.java:137)
06-03 15:11:56.676: I/dalvikvm(14156): at android.app.ActivityThread.main(ActivityThread.java:4950)
06-03 15:11:56.676: I/dalvikvm(14156): at java.lang.reflect.Method.invokeNative(Native Method)
06-03 15:11:56.676: I/dalvikvm(14156): at java.lang.reflect.Method.invoke(Method.java:511)
06-03 15:11:56.676: I/dalvikvm(14156): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
06-03 15:11:56.676: I/dalvikvm(14156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
06-03 15:11:56.676: I/dalvikvm(14156): at dalvik.system.NativeStart.main(Native Method)