展示幻灯片 - Android OutOfMemoryError

4

我正在尝试展示超过50张图片的幻灯片。但每次运行时,都会出现OutOfMemoryError错误。我的代码如下:

public class SlideshowActivity extends Activity {

private ViewFlipper myViewFlipper;
int[] image = { R.drawable.one_facebook, R.drawable.two_facebook,
        R.drawable.three_facebook, R.drawable.four_facebook, R.drawable.five_facebook,
        R.drawable.six_facebook, R.drawable.seven_facebook, R.drawable.eight_facebook,
        R.drawable.nine_facebook, R.drawable.ten_facebook, R.drawable.eleven_facebook,
        R.drawable.onetwo_facebook, etc. };

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_slideshow);
    myViewFlipper = (ViewFlipper) findViewById(R.id.myflipper);

    for (int i = 0; i < image.length; i++) {
        ImageView imageView = new ImageView(SlideshowActivity.this);
        imageView.setImageResource(image[i]);
        myViewFlipper.addView(imageView);

    }
    myViewFlipper.setAutoStart(true);
    myViewFlipper.setFlipInterval(1000);
    myViewFlipper.startFlipping();
}

我的logcat显示:
E/AndroidRuntime: 致命异常: 主线程 进程: com.applications.codegeek.slideshow,PID: 10126 java.lang.OutOfMemoryError: 尝试分配一个52920012字节的内存块,但只有4194304字节的空闲空间,并且距OOM还有31MB 在dalvik.system.VMRuntime.newNonMovableArray(Native Method) 在android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 在android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620) 在android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455) 在android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155) 在android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720) 在android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571) 在android.content.res.Resources.getDrawable(Resources.java:771) 在android.content.Context.getDrawable(Context.java:525) 在android.widget.ImageView.resolveUri(ImageView.java:856) 在android.widget.ImageView.setImageResource(ImageView.java:448) 在com.applications.codegeek.slideshow.SlideshowActivity$override.onCreate(SlideshowActivity.java:29) 在com.applications.codegeek.slideshow.SlideshowActivity$override.access$dispatch(SlideshowActivity.java) 在com.applications.codegeek.slideshow.SlideshowActivity.onCreate(SlideshowActivity.java:0) 在android.app.Activity.performCreate(Activity.java:6679) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 在android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4519) 在android.app.ActivityThread.-wrap19(ActivityThread.java) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1483) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:154) 在android.app.ActivityThread.main(ActivityThread.java:6119) 在java.lang.reflect.Method.invoke(Native Method) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
任何帮助都将不胜感激!谢谢!

3
为什么不使用图片加载库,比如Glide、Picasso等? - Sahil Manchanda
1
我在Glide For Github上发现,它很适合用来展示图片。虽然可能我理解有误。至于picasso,我看到了一些视觉例子,我的理解是它很适合制作拼贴画。如果我的理解有误,请告诉我它的实际用途。谢谢! - Shreshth Kharbanda
1个回答

1

为了减少内存占用,你可以使用这个插件Android Drawable Importer Plugin

还有,在你的清单文件中添加android:largeHeap="true",它会增加堆大小并避免OutOfMemory错误

祝好运!


1
仍然无法正常工作。我已经在清单中设置了largeHeap,但是我将所有的图像转换为ldpi,但仍然显示此错误。请帮忙。 - Shreshth Kharbanda
1
尝试在你的Gradle dexOptions中添加以下内容:android { compileSdkVersion 25 buildToolsVersion '23.0.3' dexOptions { preDexLibraries = false javaMaxHeapSize "4g" } - VictorManuel LaFra
1
不行,我还是得到了同样的错误。不过还是谢谢你的尝试。 - Shreshth Kharbanda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接