안드로이드 메모리 누수 해결 방법

MOBILE/ANDROID 2012.04.18 18:01

안드로이드 개발을 하다 보면 메모리 문제 때문에 골치 아플 때가 많은데 이를 한꺼번에 정리해 주신 분들이 있어서 정리해 보았다.

 

◎ 안드로이드 메모리 누수는 주로 언제 어떻게 일어나는가?

1. Bitmap 사용시

2. context 사용 시

3. MapView 사용 시

4. WebView  사용 시

 

◎ 안드로이드 메모리 누수 문제 해결책은?

1. Bitmap 사용시

Recycle Util을 만들어 해결한다.

[참고자료]

givenjazz님께서 올린 블로그 내용 참고 : http://givenjazz.tistory.com/48

 

2. context 사용 시

잘못된 예 : ExtendedView view = new ExtendedView(this);

올바른 예 : ExtendedView view = new ExtendedView(getApplicationContext());

설명 : ExtendedView의 맴버 context가 Activity의 context를 참조 한다.

[참고자료]

영문 : http://developer.android.com/resources/articles/avoiding-memory-leaks.html

한글 : p://samse.tistory.com/tag/Activity%20context

 

3. MapView 사용 시

아직 해결 방법이 없다 메모리 누수가 생긴다는 것만 알고 있자.

참고로 최초 실행시 약 1메가, 그 이후 생성, 종료시마다 일정 양의 메모리(적은양)가 줄어든다

MapView mv = findViewById(R.id.mapView);
List<Overlay> overlays = mv.getOverlays();
overlays.add(Overlay1);
overlays.add(Overlay2);

mv.getOverlays().clear();
mv.removeAllViews();

위와 같이 MapView의 OverLay를 add 한후에는 clear 호출시 메모리가 반환되는것을 확인하였으나

overlay의 메모리만 반환되며, MapView의 누수를 잡지는 못한단다.

[참고자료]

http://code.google.com/p/android/issues/detail?id=2181

 

4. WebView 사용 시

WebView 또한 자동적으로 메모리 누수가 발생하고(Android 3.2)

WebView 초기화만 진행해도 회당 약 30kb 정도가 사라진다고 한다.

아래 참고 자료를 보고 어느정도 메모리 누수를 완화 할 수 있다.

 

[참고자료]

NonLeakingWebView 를 사용하여 30kb -> 2kb 정도로 완화

http://stackoverflow.com/questions/3130654/memory-leak-in-webview

 

 

 

신고

설정

트랙백

댓글