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

Splash Screen 메모리 관련 질문 드립니다..

0 추천

안녕하세요

요즘 만들고 있는 앱에서 메모리 leak이 많이 발생하는거 같아서

하나하나 조금씩 수정해 나가고 있습니다..

 

따로 프로젝트 복사해서 android Monitor의 메모리부분 비교해가면서 보완해나가고 있는데

Splash 화면에서 메모리leak이 발생하는걸 확인했습니다.

 

스플래쉬 화면 만드는 방법이 단순히 ImageView에 이미지를 Background 넣어서 딜레이 줘서

넘기는 방법도 있겠지만..

 

저는 theme으로 넣어서 스플래쉬 화면을 처리하고 있습니다..

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowBackground">@drawable/splash_bg</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowFullscreen">true</item>
</style>

이런식으로 해서 따로 딜레이 안주고 넘기는 방식으로 하고 있는데

(background 처리시간동안 보이는 스플래쉬)

 

어쨋든 그 시간 로딩이미지를 보여주고 다른  Activity로 넘어가게 되는데

제가 메모리를 확인해보니 다른 Activity로 넘어가도 이 이미지를 사용한? 메모리가 해제가 안됩니다..

 

원래 스플래쉬 이미지 적용전에 2.5MB(Allocated) 였는데 스플래쉬 적용후 11MB(Allocated)입니다..

다른 액티비티로 넘어가면 메모리 해제가 되야 될 것 같은데.. 해제가 안되네요 ㅠㅠ.

System.gc(); 같은걸 날려보아도 처리가 안되는것 같습니다.. 

 

따로 이미지를 넣었으면 null처리나 recycle 처리를 할 것 같은데, 이와같은 경우에는 어떻게 해야하나요?ㅠ

 

혹시 이와 관련해서 메모리 해제 하시는 방법 아시는분 도움좀 주시면 감사하겠습니다.

구글링좀 해봐도 원하는 답을 얻기 힘드네요..

아랫링크에서 질문하신 분이 저랑 코드는 좀 다르지만 어쨋든 비슷한 내용인것 같아서..(근데 답변이 없는 ㅠ)

http://stackoverflow.com/questions/28735464/how-to-remove-window-background-image-of-splash-screen-when-application-navigate

 

익명사용자 님이 2016년 11월 24일 질문
2016년 11월 24일 reshown

1개의 답변

0 추천
background를 full image로 하지 말고

단색이라면 color 리소스를 사용하시거나 특정 패턴이 반복되는 것이면 drawable에서 tilemode를 repeat로 하여 여 리소스 자체의 사이즈를 줄여 보세요.

만약 위의 방법으로 할수 없는 사진 같은 이미지(?)라면 화면 사이즈에 맞게 구분해서 resource를 나눠주는 것도 방법이 될수 있습니다. (ex : drawable-??dpi)

또 다른 방법으로 안드로이드 Bitmap 객체에 "recycle" 이라는 object release 개념의 함수가 있는데 이를 활용해 보시는것도 방법이 될수 있겠네요.
Development Guy (70,570 포인트) 님이 2016년 11월 24일 답변
답변 감사드립니다.

Splash 이미지가 현재 전체화면을 차지하는 이미지라.. 첫번째는 안될 것같고
2번째처럼 drawable(xhdpi, xx, xxx)까지는 나눠져 있어요

3번째 알려주신 Bitmap recycle 이부분은 이미지 처리할때
Bitmap = null;
Bitmap.recycle();
이 부분과는 다른 접근인가요? 검색해봤는데 약간 감이 안와서 ㅠㅠ..
(영어가 약한것도..)

recycle 처리를 하기 위해서..
<item name="android:windowBackground">@drawable/splash_bg</item>
여기에 뭔가 접근을 해야될것 같은데.. 감이 안와서..

링크처럼 저도 onDestroy에서 아에 theme을 교체 해버리고는 있지만
효과가 없어서요 ㅠㅠ.
...