android, 메모리 최적화에 대한 추가정보들 |
Activity 나 Fragment 가 멈출 때 비트맵을 재활용하자.
- 보통 Activity의 경우 onStop(), Fragment의 경우 onDestryView() 에서 하는 것이 적당하며, Bitmap 이미지의 recycle 을 호출한다.
- Activity 나 Fragment 의 종료시에는 View 에 bind 된 drawable 을 끊어주는 것도 중요하다.
Drawable.setCallback( null );
이는 Drawable 이 View 에 bind 되어 있고, View 는 다시 Context 를 통해 Activity 에게 bind 되어 있다는 의미이다. 이를 통해 메모리 릭의 가능성을 배제할 수 있다.
이미지를 load 할 때 줄여서 읽는다.
- 먼저 로드한 다음에 BitmapFactory.createScaledBitmap() 을 이용해 resize 를 하는 경우가 있는데,
이보다는 resize 를 한 후에 읽어들이는 것이 더 좋다.
- BitmapFactory 를 이용하여 보통 읽어들이는데, BitmapFactory.Options.inSampleSize 를 적당히 잡아
다운샘플링해서 읽어들이는 것이 좋다. ( 큰 이미지를 작게 보여주는 경우 ) inSampleSize 가 1보다 작을 때는 무조건 1로 세팅되며, 원본 그대로 읽는다는 의미이다. 1 이외에 정수값이 들어갈 수 있는데, 1/N 크기로 줄여서 decoding 을 하는 것이다. 이 sample size 는 수학적으로 2의 제곱승값일 때 성능이 가장 좋다.
널~리 알려진 방법이지만, Activity, Conext등의 참조를 오래 지속하지 않는다.
- WeakReference 를 사용하는 것이 좋고, Drawable.setCallback( null ) 을 해주어 drawable 에 연결된 callback 을 제거해주는 방법도 해야 한다.
- Drawable 은 Context 와 연결이 되어 있다는 것, 그리고 Handler 도 Context 와 연결이 된다는 것을 유의해서 사용해야 한다.
outer class 에 의존하지 않는 inner class 는 모두 static 으로 선언한다.
- 실수로라도 inner class 에서 outer class 를 사용하는 경우에 메모리 릭으로 발전할 수 있다.
view 의 unbind 를 제대로 지원하지 않는 component 에 유의해라.
- 간혹가다 view 의 unbind 를 제대로 지원하지 않는 adapterview 의 종류들이 있다.
이 녀석들을 확인하여 직접 unbind 를 해주어야 하고, 불안하다면 모든 adapterview 들에 대해 unbind 를 해주면 된다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Java] Reflection Tutorial - Class (0) | 2013.11.12 |
---|---|
안드로이드 4.4 KitKat ( 킷캣 ) 뭐가 달라졌나? (0) | 2013.11.12 |
[android] PackageManager 와 ActivityManager. 그리고 Intent 이야기 (0) | 2013.11.08 |
[android] ImageView ScaleType Tutorial (2) | 2013.11.07 |
[android] Browser 의 링크를 통해 내 앱 실행시키기 (0) | 2013.11.06 |
댓글