Ringster's Techblog

Tech, Mobile, Internet

Layout XML의 Background 이미지에 할당된 메모리 즉시 반환하기

with one comment

앱을 제작하는데 있어 Layout XML의 Background로 이미지를 포함시키는 작업은 상당히 빈번하게 이루어진다.

public class MainActivity extends ActionBarActivity {
    private Button launchBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        launchBtn = (Button) findViewById(R.id.button);
        launchBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(i);
                finish();
            }
        });
    }
}

위는 액티비티를 생성하고 Launch 버튼을 클릭하면 다음 액티비티가 실행되는 간단한 코드이다.
실행 결과는 다음과 같다.

xml_activity

Background로 포함된 이미지가 OOM을 유발한 만큼 크지 않은 이상 위와 같이 정상 실행된다.
여기서 문제는 아래의 화살표 부분에서 첫번째 Activity를 종료시키고 두번째 Activity를 실행했음에도 첫번째 Activity의 background XML에 할당된 이미지가 계속 메모리 공간을 점유하고 있고, 이 메모리가 언제 반환될지 알 수 없다는 것이다.
memory_monitor

이는 이미지가 커서 많은 메모리를 점유하고 있거나, 다음 Activity에서 메모리가 많이 필요한 작업을 할 경우에 OOM을 유발시킬 수 있는 요인이 될 수 있는데, 이를 간단히 해결하는 방법은 다음과 같다.

@Override
    protected void onDestroy() {
        super.onDestroy();
        findViewById(R.id.rootView).setBackground(null);
        System.gc();
    }

memory_monitor2

OnDestroy에서 Activity가 destroy될 때 View의 Background를 null로 설정하고 명시적으로 gc를 호출했다.
이로써 두번째 Activity가 시작될 때 첫번째 Activity의 XML에 할당된 메모리를 회수했음을 확인할 수 있다.

Advertisements

Written by Ringster

2015/03/10 , 시간: 6:55 오후

안드로이드 개발에 게시됨

Tagged with , , ,

One Response

Subscribe to comments with RSS.

  1. 지금 제가 스플래시 화면을 사용하면서 이 코드를 사용해보았는데 전혀 변화가없습니다.. 디스트로이가 되는건 확인했구요
    어떻게 된걸까요..

    서호진

    2016/05/06 at 9:24 오전


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

Jay Jin, Programmer&Designer

Fork my brain because I'm ready to commit

쉐어보드

쉐어메이트에 관한 모든 것

jamesjungkuelee's biotech story

Biotech, entrepreneur, life

Communications as Ikor

기업 위기관리의 모든 것

Charles Pyo Ventures

시도와 실패, 성장의 기록. 2막에서도 계속되는 모험들.

VentureBeat

News About Tech, Money and Innovation

Open API, Cloud, DevOps 와 eBook

Open API, eBook, Cloud, DevOps

Economics of almost everything

Tech, Mobile, Internet

cylee

Tech, Mobile, Internet

gorekun.log

고어쿤로그

Google Developers Korea 블로그

Tech, Mobile, Internet

Android Developers Blog

Tech, Mobile, Internet

최피디의 앱스 개발기

기술, 앱스, SNS, 창업

D2 Blog

Tech, Mobile, Internet

All of Software

Tech, Mobile, Internet

'Startup's Story Platform’

'Startup's Story Platform’

%d 블로거가 이것을 좋아합니다: