Android gallery函数发生java.lang.OutofMemory异常

Android gallery函数发生java.lang.OutofMemory异常,android,Android,我正在尝试创建一个包含大量图片的图库 我只有一个活动将显示这一点,除了画廊将有一个放大下面的当前画廊图片。下面是一张图片来演示我所说的内容: 图片:[1] 我遇到的问题是,当我运行应用程序时会发生java.lang.OutOfMemory异常,尽管我很确定我没有超出内存堆 以下是我的Java代码: package com.exple.v1; import android.content.Context; import android.os.Bundle; import android.supp

我正在尝试创建一个包含大量图片的图库

我只有一个活动将显示这一点,除了画廊将有一个放大下面的当前画廊图片。下面是一张图片来演示我所说的内容:

图片:[1]

我遇到的问题是,当我运行应用程序时会发生java.lang.OutOfMemory异常,尽管我很确定我没有超出内存堆

以下是我的Java代码:

package com.exple.v1;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.Toast;




public class MainActivity extends ActionBarActivity {

    private Integer[] pics = {R.drawable.one,
            R.drawable.two,

            };
    private ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Gallery gallery = (Gallery)findViewById(R.id.gallery1);

        gallery.setAdapter(new ImageAdapter(this));
        imageView = (ImageView)findViewById(R.id.imageView1);


        gallery.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                Toast.makeText(getApplicationContext(), "pic: " + position, Toast.LENGTH_SHORT).show();

                imageView.setImageResource(pics[position]);
            }
        });
    }

    public class ImageAdapter extends BaseAdapter
    {
        private Context context;
        int imageBackground;

        public ImageAdapter(Context context)
        {

            this.context = context;
        }

        @Override
        public int getCount() {

            return pics.length;
        }

        @Override
        public Object getItem(int position) {

            return position;
        }

        @Override
        public long getItemId(int position) {

            return position;
        }

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

            ImageView imageView = new ImageView(context);
            imageView.setImageResource(pics[position]);


            return imageView;
        }

    }


}

如果您在应用程序中的任何其他位置使用位图,则需要确保在不再使用位图时对其调用.recycle()。原因是,即使java对象超出范围,本机对象仍保留在内存中


或者,这可能与可抽绳的大小有关。(出于好奇,它们的尺寸是多少?

检查这一点对我没有帮助,谢谢。这里有3张图片,前两张是3264 x 2448,第三张是202 x 249。非常感谢!我改变了图片的大小,现在我有了一个画廊!非常感谢。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/drawable"
    android:padding="5dp"
    tools:context="com.exple.v1.MainActivity" >

    <LinearLayout
        android:id="@+id/linear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <Gallery
            android:id="@+id/gallery1"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1.90" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical"
        android:padding="10dp" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="El che"
            android:src="@drawable/elche" />

    </LinearLayout>

</LinearLayout>
01-09 09:13:49.387: E/AndroidRuntime(2358): FATAL EXCEPTION: main
01-09 09:13:49.387: E/AndroidRuntime(2358): Process: com.exple.v1, PID: 2358
01-09 09:13:49.387: E/AndroidRuntime(2358): java.lang.OutOfMemoryError
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.content.res.Resources.loadDrawable(Resources.java:2110)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.content.res.Resources.getDrawable(Resources.java:700)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.ImageView.resolveUri(ImageView.java:638)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.ImageView.setImageResource(ImageView.java:367)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at com.exple.v1.MainActivity$ImageAdapter.getView(MainActivity.java:82)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.Gallery.makeAndAddView(Gallery.java:865)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.Gallery.fillToGalleryRightLtr(Gallery.java:819)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.Gallery.fillToGalleryRight(Gallery.java:763)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.Gallery.layout(Gallery.java:672)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.Gallery.onLayout(Gallery.java:357)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.View.layout(View.java:14817)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.View.layout(View.java:14817)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.View.layout(View.java:14817)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.View.layout(View.java:14817)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:374)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.View.layout(View.java:14817)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.View.layout(View.java:14817)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1987)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1744)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.Choreographer.doCallbacks(Choreographer.java:574)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.Choreographer.doFrame(Choreographer.java:544)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.os.Handler.handleCallback(Handler.java:733)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.os.Handler.dispatchMessage(Handler.java:95)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.os.Looper.loop(Looper.java:136)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at android.app.ActivityThread.main(ActivityThread.java:5017)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at java.lang.reflect.Method.invokeNative(Native Method)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at java.lang.reflect.Method.invoke(Method.java:515)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-09 09:13:49.387: E/AndroidRuntime(2358):     at dalvik.system.NativeStart.main(Native Method)