안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요, 앱개발 중에 문제가 있어서 질문을 올려봅니다.
갤러리에서 사진을 크롭(crop)한 후 SD카드에 temp.jpg로 출력해서
액티비티로 복귀했을때 ImageView로 표시하려고 하는데
Crop 했을때 갤러리가 Out of memory를 뿜어내면서 바로 죽어버립니다.
Crop 옵션을 뺏을때는 아예 임시파일로 복사도 되질 않습니다;
아래는 갤러리 호출하는 소스 부분입니다.
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button bt = (Button) findViewById(R.id.button);
bt.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
Intent intent =
new
Intent(
Intent.ACTION_GET_CONTENT,
// 또는 ACTION_PICK
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType(
"image/*"
);
// 모든 이미지
intent.putExtra(
"crop"
,
"true"
);
// Crop기능 활성화
intent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
// 임시파일 생성
intent.putExtra(
"outputFormat"
,
// 포맷방식
Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(intent, REQ_CODE_PICK_IMAGE);
// REQ_CODE_PICK_IMAGE == requestCode
}
});
}
getTempUri() 메소드는 SD카드영역에 temp.jpg 라는 파일을 생성한 후 URI를 반환하는 메소드라서 여기에는
문제가 없습니다. (URI 경로는 잘 반환됩니다.)
아래는 로그캣입니다.
06-06 11:57:45.468: D/dalvikvm(26622): GC_FOR_ALLOC freed 255K, 10% free 18258K/20103K, paused 17ms 06-06 11:57:45.472: I/dalvikvm-heap(26622): Grow heap (frag case) to 18.371MB for 530448-byte allocation 06-06 11:57:45.496: D/dalvikvm(26622): GC_FOR_ALLOC freed <1K, 10% free 18776K/20679K, paused 15ms 06-06 11:57:45.515: D/skia(26622): WARNING: One-shot allocator has already allocated (alloc count = 1) 06-06 11:57:51.273: D/dalvikvm(26622): GC_FOR_ALLOC freed 632K, 11% free 18531K/20679K, paused 21ms 06-06 11:57:51.293: I/ActivityManager(150): Process com.show.mini (pid 26333) has died. 06-06 11:57:51.312: I/ActivityManager(150): Process com.google.android.apps.maps (pid 26296) has died. 06-06 11:57:51.328: I/ActivityManager(150): Process com.jihyung.android.test (pid 26478) has died. 06-06 11:57:51.363: I/ActivityManager(150): Process com.kakao.talk (pid 16522) has died. 06-06 11:57:51.363: W/ActivityManager(150): Scheduling restart of crashed service com.kakao.talk/.service.MessengerService in 5000ms 06-06 11:57:51.363: I/WindowManager(150): WIN DEATH: Window{41902640 com.kakao.talk/com.kakao.talk.activity.friend.FriendsListActivity paused=false} 06-06 11:57:51.371: I/WindowManager(150): WIN DEATH: Window{4185a3f8 com.kakao.talk/com.kakao.talk.activity.main.MainTabActivity paused=false} 06-06 11:57:51.386: I/dalvikvm-heap(26622): Grow heap (frag case) to 36.880MB for 19660816-byte allocation 06-06 11:57:51.422: D/dalvikvm(26622): GC_FOR_ALLOC freed 7K, 6% free 37723K/39943K, paused 26ms 06-06 11:57:51.488: D/dalvikvm(26622): GC_CONCURRENT freed <1K, 6% free 37727K/39943K, paused 2ms+9ms 06-06 11:57:52.007: D/skia(26622): WARNING: One-shot allocator has already allocated (alloc count = 1) 06-06 11:57:52.027: D/dalvikvm(26622): GC_FOR_ALLOC freed <1K, 6% free 37726K/39943K, paused 16ms 06-06 11:57:52.027: I/dalvikvm-heap(26622): Forcing collection of SoftReferences for 19499536-byte allocation 06-06 11:57:52.054: D/dalvikvm(26622): GC_BEFORE_OOM freed 9K, 6% free 37716K/39943K, paused 29ms 06-06 11:57:52.054: E/dalvikvm-heap(26622): Out of memory on a 19499536-byte allocation. 06-06 11:57:52.054: I/dalvikvm(26622): "thread-pool-2" prio=5 tid=13 RUNNABLE 06-06 11:57:52.054: I/dalvikvm(26622): | group="main" sCount=0 dsCount=0 obj=0x41a9a590 self=0x616f68 06-06 11:57:52.054: I/dalvikvm(26622): | sysTid=26639 nice=10 sched=0/0 cgrp=bg_non_interactive handle=5063392 06-06 11:57:52.058: I/dalvikvm(26622): | schedstat=( 0 0 0 ) utm=49 stm=5 core=0 06-06 11:57:52.058: I/dalvikvm(26622): at android.graphics.BitmapRegionDecoder.nativeDecodeRegion(Native Method) 06-06 11:57:52.062: I/dalvikvm(26622): at android.graphics.BitmapRegionDecoder.decodeRegion(BitmapRegionDecoder.java:186) 06-06 11:57:52.066: I/dalvikvm(26622): at com.android.gallery3d.app.CropImage.getCroppedImage(CropImage.java:611) 06-06 11:57:52.066: I/dalvikvm(26622): at com.android.gallery3d.app.CropImage.access$300(CropImage.java:79) 06-06 11:57:52.066: I/dalvikvm(26622): at com.android.gallery3d.app.CropImage$SaveOutput.run(CropImage.java:259) 06-06 11:57:52.066: I/dalvikvm(26622): at com.android.gallery3d.app.CropImage$SaveOutput.run(CropImage.java:235) 06-06 11:57:52.066: I/dalvikvm(26622): at com.android.gallery3d.util.ThreadPool$Worker.run(ThreadPool.java:124) 06-06 11:57:52.074: I/dalvikvm(26622): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 06-06 11:57:52.074: I/dalvikvm(26622): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 06-06 11:57:52.078: I/dalvikvm(26622): at java.lang.Thread.run(Thread.java:856) 06-06 11:57:52.078: I/dalvikvm(26622): at com.android.gallery3d.util.PriorityThreadFactory$1.run(PriorityThreadFactory.java:43) 06-06 11:57:52.078: A/libc(26622): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1) 06-06 11:57:52.500: I/DEBUG(77): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 06-06 11:57:52.504: I/DEBUG(77): Build fingerprint: 'google/soju/crespo:4.0.4/IMM76D/299849:user/release-keys' 06-06 11:57:52.504: I/DEBUG(77): pid: 26622, tid: 26639 >>> com.google.android.gallery3d:crop <<< 06-06 11:57:52.504: I/DEBUG(77): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000 06-06 11:57:52.507: I/DEBUG(77): r0 00000000 r1 41d9d390 r2 0000272c r3 00000000 06-06 11:57:52.507: I/DEBUG(77): r4 41d9d350 r5 00000000 r6 00000780 r7 000027ac 06-06 11:57:52.507: I/DEBUG(77): r8 00002800 r9 000000ff 10 000009eb fp 40695f38 06-06 11:57:52.507: I/DEBUG(77): ip 40756df0 sp 52b90130 lr 406ccbd0 pc 4009dbc0 cpsr 28000010 06-06 11:57:52.511: I/DEBUG(77): d0 ff2a241fff26201b d1 ff2e2521ff2e2521 06-06 11:57:52.511: I/DEBUG(77): d2 ff312824ff302723 d3 ff3c312dff372c28 06-06 11:57:52.519: I/DEBUG(77): d4 ff473e3aff433a36 d5 ff7e7268ff5e5248 06-06 11:57:52.519: I/DEBUG(77): d6 ff958575ff918171 d7 ffa28979ff9d8474 06-06 11:57:52.519: I/DEBUG(77): d8 000009f83f000000 d9 409e020000000000 06-06 11:57:52.523: I/DEBUG(77): d10 0000000000000000 d11 0000000000000000 06-06 11:57:52.523: I/DEBUG(77): d12 0000000000000000 d13 0000000000000000 06-06 11:57:52.523: I/DEBUG(77): d14 0000000000000000 d15 0000000000000000 06-06 11:57:52.523: I/DEBUG(77): d16 0000000000000000 d17 0000000000000000 06-06 11:57:52.523: I/DEBUG(77): d18 0000000000000000 d19 0000000000000000 06-06 11:57:52.523: I/DEBUG(77): d20 3ff0000000000000 d21 8000000000000000 06-06 11:57:52.523: I/DEBUG(77): d22 0000000000000000 d23 ffff492effff492e 06-06 11:57:52.523: I/DEBUG(77): d24 0001c5a20001c5a2 d25 000166e9000166e9 06-06 11:57:52.535: I/DEBUG(77): d26 0000000200000002 d27 0000000000000000 06-06 11:57:52.535: I/DEBUG(77): d28 09dac00009d44000 d29 3ff0000000000000 06-06 11:57:52.535: I/DEBUG(77): d30 0000000000000000 d31 3ff0000000000000 06-06 11:57:52.535: I/DEBUG(77): scr 20000013 06-06 11:57:53.132: I/DEBUG(77): #00 pc 0000dbc0 /system/lib/libc.so (memcpy) 06-06 11:57:53.132: I/DEBUG(77): #01 pc 00096bcc /system/lib/libskia.so 06-06 11:57:53.136: I/DEBUG(77): #02 pc 0007743c /system/lib/libskia.so (_ZNK6SkDraw10drawBitmapERK8SkBitmapRK8SkMatrixRK7SkPaint) 06-06 11:57:53.136: I/DEBUG(77): code around pc: 06-06 11:57:53.136: I/DEBUG(77): 4009dba0 3a000009 f5d1f080 f5d1f0c0 f5d1f100 ...:............ 06-06 11:57:53.136: I/DEBUG(77): 4009dbb0 f421020d f421420d f5d1f100 e2522040 ..!..B!.....@ R. 06-06 11:57:53.136: I/DEBUG(77): 4009dbc0 f400022d f400422d 2afffff8 e2822040 -...-B.....*@ .. 06-06 11:57:53.140: I/DEBUG(77): 4009dbd0 e2522020 3a000003 f421020d e2522020 R....:..!. R. 06-06 11:57:53.140: I/DEBUG(77): 4009dbe0 f400022d 2afffffb e2822020 e3120010 -......* ...... 06-06 11:57:53.140: I/DEBUG(77): code around lr: 06-06 11:57:53.140: I/DEBUG(77): 406ccbb0 e590b018 e0855002 e0834004 e1a00005 .....P...@...... 06-06 11:57:53.140: I/DEBUG(77): 406ccbc0 e1a01004 e1a0200a e1a03009 e12fff3b ..... ...0..;./. 06-06 11:57:53.140: I/DEBUG(77): 406ccbd0 e2566001 e0855007 e0844008 1afffff6 .`V..P...@...... 06-06 11:57:53.140: I/DEBUG(77): 406ccbe0 e8bd8ff8 e92d4ff0 e1a04000 e5900004 .....O-..@...... 06-06 11:57:53.144: I/DEBUG(77): 406ccbf0 e1a0e101 e5948008 e24dd014 e594c00c ..........M..... 06-06 11:57:53.144: I/DEBUG(77): stack: 06-06 11:57:53.144: I/DEBUG(77): 52b900f0 00000000 06-06 11:57:53.144: I/DEBUG(77): 52b900f4 00000000 06-06 11:57:53.144: I/DEBUG(77): 52b900f8 40756de0 /system/lib/libskia.so 06-06 11:57:53.144: I/DEBUG(77): 52b900fc 52b902ec 06-06 11:57:53.144: I/DEBUG(77): 52b90100 40756de0 /system/lib/libskia.so 06-06 11:57:53.148: I/DEBUG(77): 52b90104 406ccff4 /system/lib/libskia.so 06-06 11:57:53.156: I/DEBUG(77): 52b90108 40756de0 /system/lib/libskia.so 06-06 11:57:53.156: I/DEBUG(77): 52b9010c 52b9045c 06-06 11:57:53.156: I/DEBUG(77): 52b90110 52b902ec 06-06 11:57:53.156: I/DEBUG(77): 52b90114 000000ff 06-06 11:57:53.156: I/DEBUG(77): 52b90118 004d8548 [heap] 06-06 11:57:53.156: I/DEBUG(77): 52b9011c 406cd1d0 /system/lib/libskia.so 06-06 11:57:53.160: I/DEBUG(77): 52b90120 39323939 06-06 11:57:53.160: I/DEBUG(77): 52b90124 52b904f8 06-06 11:57:53.160: I/DEBUG(77): 52b90128 df0027ad 06-06 11:57:53.160: I/DEBUG(77): 52b9012c 00000000 06-06 11:57:53.160: I/DEBUG(77): #00 52b90130 00000000 06-06 11:57:53.160: I/DEBUG(77): 52b90134 406ccbd0 /system/lib/libskia.so 06-06 11:57:53.160: I/DEBUG(77): #01 52b90138 000009eb 06-06 11:57:53.160: I/DEBUG(77): 52b9013c 004d8548 [heap] 06-06 11:57:53.160: I/DEBUG(77): 52b90140 00000780 06-06 11:57:53.160: I/DEBUG(77): 52b90144 52b9045c 06-06 11:57:53.164: I/DEBUG(77): 52b90148 52b9041c 06-06 11:57:53.164: I/DEBUG(77): 52b9014c 52b902ec 06-06 11:57:53.164: I/DEBUG(77): 52b90150 fffffff8 06-06 11:57:53.164: I/DEBUG(77): 52b90154 52b904f8 06-06 11:57:53.164: I/DEBUG(77): 52b90158 00000000 06-06 11:57:53.164: I/DEBUG(77): 52b9015c 406ad440 /system/lib/libskia.so 06-06 11:57:54.722: I/BootReceiver(150): Copying /data/tombstones/tombstone_09 to DropBox (SYSTEM_TOMBSTONE) 06-06 11:57:54.840: D/dalvikvm(150): GC_FOR_ALLOC freed 2101K, 19% free 17557K/21447K, paused 89ms 06-06 11:57:54.871: I/WindowManager(150): WIN DEATH: Window{4186e068 SurfaceView paused=false} 06-06 11:57:54.871: I/ActivityManager(150): Process com.google.android.gallery3d:crop (pid 26622) has died. 06-06 11:57:54.871: W/ActivityManager(150): Force removing ActivityRecord{4190c9f8 com.google.android.gallery3d/com.android.gallery3d.app.CropImage}: app died, no saved state 06-06 11:57:54.882: I/WindowManager(150): WIN DEATH: Window{4174c378 com.google.android.gallery3d/com.android.gallery3d.app.CropImage paused=false} 06-06 11:57:54.890: I/WindowManager(150): WIN DEATH: Window{419b2f28 com.google.android.gallery3d/com.android.gallery3d.app.CropImage paused=false}
단 몇줄 사이에 저렇게 문제가 발생하니 답답해서 미칠노릇입니다. ㅠ
기종은 넥서스 S입니다.
분명 예전에는 저 소스가 아무 문제없이 잘 동작했었습니다... 근데 지금은 안되네요 ㅠ
조언 좀 부탁드립니다.