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

out of memory (oom) 관련 질문입니다.

0 추천

안녕하세요. oom관련하여 문의드립니다.

oom에 대해 찾아보면 bitmap 객체 사용시에 많이 난다고 하시더라구요.

그런데 현재 저는 앱 디자인 특성상 이미지를 많이 쓸 수 밖에 없습니다.

res 폴더에 이미지들을 가져다 놓고, xml에서 "@drawable/파일명" 이런 형태로 이미지들을 불러옵니다.

그러면 액티비티에서는 ImageView iv = (ImageView) findViewById(R.id.iv_test); 이런형태로 사용합니다.

이렇게 할 경우 oom날 가능성이 많이 높아지나요 ?

 

recyle를 해주라고하는데,  저 처럼 xml에서 이미지 파일 경로를 지정해주는 경우에는 어떻게 리사이클 처리를 해야하나요 ?

 

외부 이미지나 비트맵객체를 사용하진 않지만, oom이 한번씩 일어나네요.

어떤 곳을 체크해야 할 지 난감합니다 ㅜㅜ 아래는 oom 에러 로그입니다.

 

앱을 계속 사용하다가, 종료 후 앱을 재실행 하면 바로 oom이 날때가 있더라구요.

저기 나오는 activitySplashScreen 의 82번째 라인은

setContentView(R.layout.activity_splash_screen); 이렇게 되어 있구요.

activity_splash_screen.xml의 8번째 라인은 <RelativeLayout 로 시작합니다 ㅜㅜ

 

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.revolutionists.main/com.revolutionists.main.ActivitySplashScreen}: android.view.InflateException: Binary XML file line #8: Error inflating class <unknown>
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2436)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2495)
at android.app.ActivityThread.access$900(ActivityThread.java:170)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5635)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInflater.java:626)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:675)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:700)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:352)
at android.app.Activity.setContentView(Activity.java:2057)
at com.revolutionists.main.ActivitySplashScreen.onCreate(ActivitySplashScreen.java:82)
at android.app.Activity.performCreate(Activity.java:5580)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2400)
... 11 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:600)
... 24 more
Caused by: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:701)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:526)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:889)
at android.content.res.Resources.loadDrawable(Resources.java:3453)
at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
at android.view.View.<init>(View.java:3717)
at android.view.View.<init>(View.java:3647)
at android.view.ViewGroup.<init>(ViewGroup.java:475)
at android.widget.RelativeLayout.<init>(RelativeLayout.java:236)
... 27 more
학생개발자 님이 2015년 3월 30일 질문

2개의 답변

0 추천
http://helloworld.naver.com/helloworld/textyle/539525

설명이 저렇게 자세하게 나와있는데도 제 실력으로는 해결할 수 없어서 picaso, uidl 같은 라이브러리 쓰고 있어요.
쎄미 (162,410 포인트) 님이 2015년 3월 30일 답변
0 추천
xml상에서 준 이미지가 너무 커서 그런거같네요

이미지가 크면 소스상에서 비트맵옵션으로 크기를 줄여서 줘보셔요
nicehee (73,100 포인트) 님이 2015년 3월 30일 답변
...