본문 바로가기

나의 플랫폼/안드로이드

[ Android ] Wallpaper 개발 중 Map 클래스 사용 시

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 Map클래스를 이용하여 이벤트를 주거나 정보를 저장해 놓고~ 
Wallpaper에 움직임을 많이 주는데요.

 Map클래스를 세 개 사용하고(한 Map에 최대 1200개 까지 들어가 있음),
홈 화면에 Wallpaper를 실행 시켜 놓은 상태에서
미리보기를 실행 했을 경우  메모리가 쌓인 것을 볼 수가 있었습니다.

11-02 16:27:06.074: D/DEBUG1(1411): onSurfaceCreated : com.google.android.gles_jni.EGLConfigImpl@40b0ca70

11-02 16:27:06.074: D/DEBUG(1411):  0 Heap Size onSurfaceCreated : 4798824

11-02 16:27:06.273: D/DEBUG(1411): 210003 -> 1 Heap Size onSurfaceCreated : 4929784

11-02 16:27:06.429: D/DEBUG(1411): 2 Heap Size onSurfaceCreated : 5483296

11-02 16:27:06.437: D/DEBUG(1411): 3 Heap Size onSurfaceCreated : 5483328

11-02 16:27:06.437: D/DEBUG(1411): 4Heap Size onSurfaceCreated : 5483352

11-02 16:27:06.437: D/DEBUG1(1411): onSurfaceChanged
 // 미리보기에서 첫번째 실행 하고 종료 시켰을 때 메모리 상태 

11-02 16:27:08.421: D/DEBUG(1411): Heap Size Before release : 5789328

11-02 16:27:08.542: D/DEBUG(1411): Heap Size After release : 5789544

11-02 16:27:11.632: D/DEBUG1(1411): onSurfaceCreated : com.google.android.gles_jni.EGLConfigImpl@40d46610

11-02 16:27:11.667: D/DEBUG(1411):  0 Heap Size onSurfaceCreated : 5386648

11-02 16:27:11.910: D/DEBUG(1411): 210003 -> 1 Heap Size onSurfaceCreated : 5517512

11-02 16:27:12.019: D/DEBUG(1411): 2 Heap Size onSurfaceCreated : 6068416

11-02 16:27:12.023: D/DEBUG(1411): 3 Heap Size onSurfaceCreated : 6068416

11-02 16:27:12.027: D/DEBUG(1411): 4Heap Size onSurfaceCreated : 6068416

11-02 16:27:12.027: D/DEBUG1(1411): onSurfaceChanged
 // 미리보기에서 두번째 실행 하고 종료 시켰을 때 메모리 상태  

11-02 16:27:13.871: D/DEBUG(1411): Heap Size Before release : 5962288

11-02 16:27:14.027: D/DEBUG(1411): Heap Size After release : 5962288



< 넥서스 s , Sdk 2.3.3으로 테스트 > 
이렇게 메모리가 계속 쌓이다가 결국 뻣어버리는 현상이 발생 


선언 다음과 같음.

 private Map<Integer,GLSquare> map1 = new HashMap<Integer, GLSquare>();
 private Map<Integer,GLSquare> map2 = new HashMap<Integer, GLSquare>();
 private Map<Integer,GLSquare> map3 = new HashMap<Integer, GLSquare>();


그래서 종료 시 clear를 시켰더니, onDrawFrame에서 null값으로 인식 하는 것을 보고,
아!!! 미리보기와 홈 화면에 실행되고 있는 Wallpaper가 서로 메모리를 공유하는 구나!!


라는 것을 인지했습니다.

그래서 모든 변수에 static을 줬더니

private static Map<Integer,GLSquare> map1 = new HashMap<Integer, GLSquare>();

private static Map<Integer,GLSquare> map2 = new HashMap<Integer, GLSquare>();

private static Map<Integer,GLSquare> map3 = new HashMap<Integer, GLSquare>();

 
로그 결과가

11-02 16:33:40.535: D/DEBUG(1447):  0 Heap Size onSurfaceCreated : 4815360

11-02 16:33:40.769: D/DEBUG(1447): 210003 -> 1 Heap Size onSurfaceCreated : 4945952

11-02 16:33:40.898: D/DEBUG(1447): 2 Heap Size onSurfaceCreated : 5499224

11-02 16:33:40.902: D/DEBUG(1447): 3 Heap Size onSurfaceCreated : 5499224

11-02 16:33:40.906: D/DEBUG(1447): 4Heap Size onSurfaceCreated : 5499224

11-02 16:33:40.906: D/DEBUG1(1447): onSurfaceChanged

11-02 16:33:42.175: D/DEBUG(1447): Heap Size Before release : 5079800

11-02 16:33:42.277: D/DEBUG(1447): Heap Size After release : 4812984

11-02 16:33:44.816: D/DEBUG1(1447): onSurfaceCreated : com.google.android.gles_jni.EGLConfigImpl@40a225e0

11-02 16:33:44.820: D/DEBUG(1447):  0 Heap Size onSurfaceCreated : 4822104

11-02 16:33:45.050: D/DEBUG(1447): 210003 -> 1 Heap Size onSurfaceCreated : 4952368

11-02 16:33:45.062: D/DEBUG(1447): 2 Heap Size onSurfaceCreated : 5520736

11-02 16:33:45.062: D/DEBUG(1447): 3 Heap Size onSurfaceCreated : 5520736

11-02 16:33:45.066: D/DEBUG(1447): 4Heap Size onSurfaceCreated : 5520736

11-02 16:33:45.066: D/DEBUG1(1447): onSurfaceChanged

11-02 16:33:45.964: D/DEBUG(1447): Heap Size Before release : 5101336

11-02 16:33:46.054: D/DEBUG(1447): Heap Size After release : 4817536


 
메모리 사용량의 변화가 적은 것을 알 수 있습니다.

현재 5000byte 정도가... 남은 것 같네요;;

열심히 또 어디에서 메모리를 먹고 있는지 확인해볼까 합니다..^^;;;


오늘도 화이링!!! ㅋ