본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] 메모리 최적화에 대한 추가정보들

by 돼지왕 왕돼지 2013. 11. 11.
반응형


 android, 메모리 최적화에 대한 추가정보들

 

[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 를 해주면 된다.



반응형

댓글