我使用ViewPager
和PagerAdapter
每页显示一个ImageView
。图像是全屏的,但它们甚至不是那么大:120-320 kb per picture and 720 x 940 px resolution
。
我的代码应该在更改页面时销毁ImageView
。我每次加载第4张图片后都会收到Out of Memory
错误并导致我的应用崩溃。
为什么我会出现内存不足错误?!
我的寻呼机适配器
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) {
}
}
堆栈跟踪
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)