2014-05-16 3 views
-2

Android 앱을 작성하고 있지만 충돌이 발생합니다. 여기에 코드입니다 :ImageView 및 ArrayList

public class Images extends Activity { 

    private ImageView d1; 
    private ArrayList<Integer> listaImagenes=new ArrayList<Integer>(); 
    @Override 
    public void onCreate (Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     this.rellenar(); 
      setContentView(R.layout.imagentonas); 
      d1=(ImageView)findViewById(R.id.imagenes01); 
      d1.setImageResource(listaImagenes.get(0)); 

    } 
    private void rellenar() 
    { 
     listaImagenes.add(R.drawable.rosa1); 
     listaImagenes.add(R.drawable.imagencilla); 
    } 
} 

로그 캣 : 나는 listaImagenes.get(0) 응용 프로그램 충돌, listaImagenes.get(1)에 변경하는 경우

>05-16 14:21:13.792: E/dalvikvm-heap(887): Out of memory on a 
> 69120016-byte allocation. 05-16 14:21:13.882: E/AndroidRuntime(887): 
> FATAL EXCEPTION: main 05-16 14:21:13.882: E/AndroidRuntime(887): 
> Process: com.example.terceraniversario, PID: 887 05-16 14:21:13.882: 
> E/AndroidRuntime(887): java.lang.OutOfMemoryError 05-16 14:21:13.882: 
> E/AndroidRuntime(887): at 
> android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 05-16 
> 14:21:13.882: E/AndroidRuntime(887): at 
> android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587) 
> 05-16 14:21:13.882: E/AndroidRuntime(887): at 
> android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422) 
> 05-16 14:21:13.882: E/AndroidRuntime(887): at 
> android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840) 
> 05-16 14:21:13.882: E/AndroidRuntime(887): at 
> android.content.res.Resources.loadDrawable(Resources.java:2110) 05-16 
> 14:21:13.882: E/AndroidRuntime(887): at 
> android.content.res.Resources.getDrawable(Resources.java:700) 05-16 
> 14:21:13.882: E/AndroidRuntime(887): at 
> android.widget.ImageView.resolveUri(ImageView.java:638) 05-16 
> 14:21:13.882: E/AndroidRuntime(887): at 
> android.widget.ImageView.setImageResource(ImageView.java:367) 05-16 
> 14:21:13.882: E/AndroidRuntime(887): at 
> com.example.terceraniversario.Images.onCreate(Images.java:20) 05-16 
> 14:21:13.882: E/AndroidRuntime(887): at 
> android.app.Activity.performCreate(Activity.java:5231) 05-16 
> 14:21:13.882: E/AndroidRuntime(887): at 
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
> 05-16 14:21:13.882: E/AndroidRuntime(887): at 
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
> 05-16 14:21:13.882: E/AndroidRuntime(887): at 
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
> 05-16 14:21:13.882: E/AndroidRuntime(887): at 
> android.app.ActivityThread.access$800(ActivityThread.java:135) 05-16 
> 14:21:13.882: E/AndroidRuntime(887): at 
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
> 05-16 14:21:13.882: E/AndroidRuntime(887): at 
> android.os.Handler.dispatchMessage(Handler.java:102) 05-16 
> 14:21:13.882: E/AndroidRuntime(887): at 
> android.os.Looper.loop(Looper.java:136) 05-16 14:21:13.882: 
> E/AndroidRuntime(887): at 
> android.app.ActivityThread.main(ActivityThread.java:5017) 05-16 
> 14:21:13.882: E/AndroidRuntime(887): at 
> java.lang.reflect.Method.invokeNative(Native Method) 05-16 
> 14:21:13.882: E/AndroidRuntime(887): at 
> java.lang.reflect.Method.invoke(Method.java:515) 05-16 14:21:13.882: 
> E/AndroidRuntime(887): at 
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
> 05-16 14:21:13.882: E/AndroidRuntime(887): at 
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 05-16 
> 14:21:13.882: E/AndroidRuntime(887): at 
> dalvik.system.NativeStart.main(Native Method) 05-16 14:22:16.452: 
> E/dalvikvm-heap(1167): Out of memory on a 69120016-byte allocation. 
> 05-16 14:22:16.542: E/AndroidRuntime(1167): FATAL EXCEPTION: main 
> 05-16 14:22:16.542: E/AndroidRuntime(1167): Process: 
> com.example.terceraniversario, PID: 1167 05-16 14:22:16.542: 
> E/AndroidRuntime(1167): java.lang.OutOfMemoryError 05-16 14:22:16.542: 
> E/AndroidRuntime(1167): at 
> android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 05-16 
> 14:22:16.542: E/AndroidRuntime(1167):  at 
> android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587) 
> 05-16 14:22:16.542: E/AndroidRuntime(1167): at 
> android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422) 
> 05-16 14:22:16.542: E/AndroidRuntime(1167): at 
> android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840) 
> 05-16 14:22:16.542: E/AndroidRuntime(1167): at 
> android.content.res.Resources.loadDrawable(Resources.java:2110) 05-16 
> 14:22:16.542: E/AndroidRuntime(1167):  at 
> android.content.res.Resources.getDrawable(Resources.java:700) 05-16 
> 14:22:16.542: E/AndroidRuntime(1167):  at 
> android.widget.ImageView.resolveUri(ImageView.java:638) 05-16 
> 14:22:16.542: E/AndroidRuntime(1167):  at 
> android.widget.ImageView.setImageResource(ImageView.java:367) 05-16 
> 14:22:16.542: E/AndroidRuntime(1167):  at 
> com.example.terceraniversario.Images.onCreate(Images.java:20) 05-16 
> 14:22:16.542: E/AndroidRuntime(1167):  at 
> android.app.Activity.performCreate(Activity.java:5231) 05-16 
> 14:22:16.542: E/AndroidRuntime(1167):  at 
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
> 05-16 14:22:16.542: E/AndroidRuntime(1167): at 
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
> 05-16 14:22:16.542: E/AndroidRuntime(1167): at 
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
> 05-16 14:22:16.542: E/AndroidRuntime(1167): at 
> android.app.ActivityThread.access$800(ActivityThread.java:135) 05-16 
> 14:22:16.542: E/AndroidRuntime(1167):  at 
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
> 05-16 14:22:16.542: E/AndroidRuntime(1167): at 
> android.os.Handler.dispatchMessage(Handler.java:102) 05-16 
> 14:22:16.542: E/AndroidRuntime(1167):  at 
> android.os.Looper.loop(Looper.java:136) 05-16 14:22:16.542: 
> E/AndroidRuntime(1167): at 
> android.app.ActivityThread.main(ActivityThread.java:5017) 05-16 
> 14:22:16.542: E/AndroidRuntime(1167):  at 
> java.lang.reflect.Method.invokeNative(Native Method) 05-16 
> 14:22:16.542: E/AndroidRuntime(1167):  at 
> java.lang.reflect.Method.invoke(Method.java:515) 05-16 14:22:16.542: 
> E/AndroidRuntime(1167): at 
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
> 05-16 14:22:16.542: E/AndroidRuntime(1167): at 
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 05-16 
> 14:22:16.542: E/AndroidRuntime(1167):  at 
> dalvik.system.NativeStart.main(Native Method) 05-16 14:22:35.702: 
> E/dalvikvm-heap(1210): Out of memory on a 69120016-byte allocation. 
> 05-16 14:22:35.782: E/AndroidRuntime(1210): FATAL EXCEPTION: main 
> 05-16 14:22:35.782: E/AndroidRuntime(1210): Process: 
> com.example.terceraniversario, PID: 1210 05-16 14:22:35.782: 
> E/AndroidRuntime(1210): java.lang.OutOfMemoryError 05-16 14:22:35.782: 
> E/AndroidRuntime(1210): at 
> android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 05-16 
> 14:22:35.782: E/AndroidRuntime(1210):  at 
> android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587) 
> 05-16 14:22:35.782: E/AndroidRuntime(1210): at 
> android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422) 
> 05-16 14:22:35.782: E/AndroidRuntime(1210): at 
> android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840) 
> 05-16 14:22:35.782: E/AndroidRuntime(1210): at 
> android.content.res.Resources.loadDrawable(Resources.java:2110) 05-16 
> 14:22:35.782: E/AndroidRuntime(1210):  at 
> android.content.res.Resources.getDrawable(Resources.java:700) 05-16 
> 14:22:35.782: E/AndroidRuntime(1210):  at 
> android.widget.ImageView.resolveUri(ImageView.java:638) 05-16 
> 14:22:35.782: E/AndroidRuntime(1210):  at 
> android.widget.ImageView.setImageResource(ImageView.java:367) 05-16 
> 14:22:35.782: E/AndroidRuntime(1210):  at 
> com.example.terceraniversario.Images.onCreate(Images.java:20) 05-16 
> 14:22:35.782: E/AndroidRuntime(1210):  at 
> android.app.Activity.performCreate(Activity.java:5231) 05-16 
> 14:22:35.782: E/AndroidRuntime(1210):  at 
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
> 05-16 14:22:35.782: E/AndroidRuntime(1210): at 
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
> 05-16 14:22:35.782: E/AndroidRuntime(1210): at 
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
> 05-16 14:22:35.782: E/AndroidRuntime(1210): at 
> android.app.ActivityThread.access$800(ActivityThread.java:135) 05-16 
> 14:22:35.782: E/AndroidRuntime(1210):  at 
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
> 05-16 14:22:35.782: E/AndroidRuntime(1210): at 
> android.os.Handler.dispatchMessage(Handler.java:102) 05-16 
> 14:22:35.782: E/AndroidRuntime(1210):  at 
> android.os.Looper.loop(Looper.java:136) 05-16 14:22:35.782: 
> E/AndroidRuntime(1210): at 
> android.app.ActivityThread.main(ActivityThread.java:5017) 05-16 
> 14:22:35.782: E/AndroidRuntime(1210):  at 
> java.lang.reflect.Method.invokeNative(Native Method) 05-16 
> 14:22:35.782: E/AndroidRuntime(1210):  at 
> java.lang.reflect.Method.invoke(Method.java:515) 05-16 14:22:35.782: 
> E/AndroidRuntime(1210): at 
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
> 05-16 14:22:35.782: E/AndroidRuntime(1210): at 
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 05-16 
> 14:22:35.782: E/AndroidRuntime(1210):  at 
> dalvik.system.NativeStart.main(Native Method) 

. 왜 이런 일이 일어날 지 모르겠다 ...

+0

Logcat을 게시 할 수 있습니까? – Lal

+0

무엇이 오류입니까? ArrayOutOfBoundsException? –

+2

@Lal' private ArrayList listaImagenes = new ArrayList ();' – codeMagic

답변

0

OutOfMemoryError을 받고 있기 때문에로드하려고하는 리소스의 크기와 관련이있다. 아마 rosa1 드로어 블은 거대한 반면, imagencilla 드로어 블은 더 작다고 말할 수 있습니다. 이렇게하면 imagencilla을로드하려고 시도 할 때 크래시가 발생하지 않지만 rosa1을로드하려고하면 충돌이 발생합니다.

APK에 포함 된 드로어 블 rosa1 드로어 블의 크기를 확인하고 가능한 경우 축소해야합니다. 축소가 불가능한 경우이를 모두 디코드하려고 시도하지 않는 리소스를 한 번에 메모리로로드하는 사용자 지정 방법을 찾아야 할 수 있습니다.