마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

이미지뷰에서 뒤로가기 버튼 누를시 에러발생좀 도와주세요

0 추천

카메라 / 갤러리 어플을 공부삼아 개발하고 있는 학생입니다.

갤러리에서 이미지를 선택해 크게 확대해서 보고 back버튼을 누르면 다시 갤러리 목록 화면으로 넘어가야되는데

back키를 누르면 앱이 중지되어 종료가 되어버리네요.

 

 

public class ImageGridFull extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
ImageView imageView = new ImageView(this);
setContentView(imageView);
 
Intent intent = getIntent();
String path = intent.getStringExtra("path");
try {
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inSampleSize = 2;  
 
Bitmap bm = BitmapFactory.decodeFile(path, opt);
imageView.setImageBitmap(bm);
 
 
 
}
catch (OutOfMemoryError e) {
Toast.makeText(ImageGridFull.this,"이미지가 너무 큽니다.",
Toast.LENGTH_SHORT).show();
}
}
}
이게 갤러리에서 이미지뷰로 띄워준 소스입니다. 
소스에는 에러가 없구요. 어플 실행할때 logcat에 빨간 에러가 뜨면서 중지가 되어버립니다.

 

 

logcat의 에러내용은 아래와 같습니다.

08-09 17:36:53.641: E/AndroidRuntime(25479): FATAL EXCEPTION: main
08-09 17:36:53.641: E/AndroidRuntime(25479): java.lang.OutOfMemoryError
08-09 17:36:53.641: E/AndroidRuntime(25479): at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
08-09 17:36:53.641: E/AndroidRuntime(25479): at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:551)
08-09 17:36:53.641: E/AndroidRuntime(25479): at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:569)
08-09 17:36:53.641: E/AndroidRuntime(25479): at android.provider.MediaStore$InternalThumbnails.getThumbnail(MediaStore.java:598)
08-09 17:36:53.641: E/AndroidRuntime(25479): at android.provider.MediaStore$Images$Thumbnails.getThumbnail(MediaStore.java:1008)
08-09 17:36:53.641: E/AndroidRuntime(25479): at com.example.sgcamera.gallery.onCreate(gallery.java:46)
08-09 17:36:53.641: E/AndroidRuntime(25479): at android.app.Activity.performCreate(Activity.java:5206)
08-09 17:36:53.641: E/AndroidRuntime(25479): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
08-09 17:36:53.641: E/AndroidRuntime(25479): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
08-09 17:36:53.641: E/AndroidRuntime(25479): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
08-09 17:36:53.641: E/AndroidRuntime(25479): at android.app.ActivityThread.access$700(ActivityThread.java:140)
08-09 17:36:53.641: E/AndroidRuntime(25479): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
08-09 17:36:53.641: E/AndroidRuntime(25479): at android.os.Handler.dispatchMessage(Handler.java:99)
08-09 17:36:53.641: E/AndroidRuntime(25479): at android.os.Looper.loop(Looper.java:137)
08-09 17:36:53.641: E/AndroidRuntime(25479): at android.app.ActivityThread.main(ActivityThread.java:4921)
08-09 17:36:53.641: E/AndroidRuntime(25479): at java.lang.reflect.Method.invokeNative(Native Method)
08-09 17:36:53.641: E/AndroidRuntime(25479): at java.lang.reflect.Method.invoke(Method.java:511)
08-09 17:36:53.641: E/AndroidRuntime(25479): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
08-09 17:36:53.641: E/AndroidRuntime(25479): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
08-09 17:36:53.641: E/AndroidRuntime(25479): at dalvik.system.NativeStart.main(Native Method)
 
 
 
고수님들의 답변 부탁드립니다!
제이비 (140 포인트) 님이 2013년 8월 9일 질문

1개의 답변

0 추천

큰 사이즈의 이미지를 화면에 띄우게 되면 두 세번만 반복해도 금방 OutOfMemory 로 앱이 죽게됩니다.

Bitmap 객체에 대한 메모리 관리를 반드시 해주셔야 하는데요 관련된 이슈가 구글링 하시면

많이 올라와있습니다.

다음 링크도 참고하시고 이 외에 다른 문서들도 많이 참고하시기 바랍니다.

http://ecogeo.tistory.com/287

Gradler (109,780 포인트) 님이 2013년 8월 9일 답변
100kb정도되는 이미지도 화면에 띄웠다가 back키를 누르면 앱이 죽어버리는데 이것도 같은 이유에서 인가요??
아마도 그럴거라 보여집니다.
...