ViewPager图库没有内存

时间:2014-06-03 22:22:57

标签: android imageview android-viewpager out-of-memory android-pageradapter

我使用ViewPagerPagerAdapter每页显示一个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)

0 个答案:

没有答案