'Android'에 해당되는 글 2건

  1. 2012.08.31 큰 Bitmap 사용 시 주의점
  2. 2012.07.17 ViewFlipper의 애니메이션 리스너 추가하기

http://www.facebook.com/notes/jung-haengs-nexus-one/android-%EA%B0%9C%EB%B0%9C%EC%8B%9C-%ED%81%B0-bitmap%EC%9D%84-%EA%B4%80%EB%A6%AC%ED%95%A0%EB%95%8C-%EC%A3%BC%EC%9D%98%ED%95%B4%EC%95%BC%ED%95%A0-memory-leak-%ED%8F%AC%EC%9D%B8%ED%8A%B8/225201584184632

 

신경 쓴다고 써도 잘 안되는 안드로이드 메모리 관리..

 

특히나 고해상도 게임을 제작하는 경우(이번엔 무려 1280*720 사이즈 대상..)

최대화된 이미지를 가지고 요리조리 크기를 변경해가며 사용하게 되는데..

100% bitmap 사용이 불가한 경우도 있었음.

ex) animation-list 로 프레임 애니메이션을 보여줄 때 inSampleSize 사용이 불가했음..(AnimationDrawable이기 때문인지 Drawable로만 생성 가능.. Bitmap으로 생성 불가..)

 

여기에 덧붙여 C와는 다르게 GC가 즉시 100% 수행된다는 보장이 없음..

 

오늘 디버깅하다 본건데 좀 큰 이미지 로드 시 아래와 같은 메시지가 나오던데

아마도 이게 메모리 확보하려고 GC가 돌아가는 로그 같음..

 

dalvikvm GC_EXTERNAL_ALLOC freed x K, x % freed x K/x K, external x K/ x K, paused x ms

반복

 

이게 정말 안드로이드 적응하기 힘든 특징..

특히나 링큰된 글에서처럼 ActivityContext를 참조하고 있는 객체가 있을 때 그 참조 횟수 디버깅에 또 시간을 할애해야한다는게 너무 큰 함정인듯..(적어도 나에겐;)

 

c에서의 smart pointer나 obj-c에서 쓰는 retainCount 같은거 없나..?

어디가서 무식하단 소리 들을라 ㅜ

'Android' 카테고리의 다른 글

onCreateDialog/onPrepareDialog  (8) 2012.09.06
안드로이드 성능 개선  (0) 2012.08.31
AnimationDrawable 사용 시 주의점  (2) 2012.08.24
System(0) 으로도 죽지 않는 app 종료 시키기  (0) 2012.08.21
에뮬레이터 관련 정보  (0) 2012.08.13
Posted by 독뽀
,

ViewFlipper 사용 시 View 전환 이외에 또 다른 기능을 추가하고 싶을 때는

Flipping animation이 끝나는 시점 등에 해당 기능을 추가하면 된다.

 

http://stackoverflow.com/questions/3813108/listener-for-viewflipper-widget-flipping-events

 

위의 경우는 Animation을 코드로 삽입한 경우이고..

xml로 설정하고 함수가 호출될때만 해당 anim xml일이 호출되는 경우라면 다음과 같이 ViewFlipper의 터치 이벤트를 핸들하면 된다.

 

mViewFlipper.setOnTouchListener( new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    mPrePosX = (int) event.getX();
                }

                if (event.getAction() == MotionEvent.ACTION_UP) {
                    int nTouchPosX = (int) event.getX();

                    if (nTouchPosX < mPrePosX) {
                        slideToNext();
                    } else if (nTouchPosX > mPrePosX) {
                        slideToPrev();
                    }

                    mPrePosX = nTouchPosX;
                }

                return true;
            }
        });

 

위의 slideToNext() 함수 내부에서는 mViewFlipper.SetInAnimation / SetOutAnimation / showNext 를 호출하고 그 외에 할 일들을 추가하면 될 것이다.

반대로 slideToPrev() 함수는 위와 다 똑같지만 마지막에 showNext 대신 showPrevious를 호출하면 끝.

mPrePosX 는 좌로 슬라이드 했는지 우로 슬라이드 했는지를 판단하기 위함이므로 그대로 사용해도 무방함. (좌: prev, 우: next)

'Android' 카테고리의 다른 글

에뮬레이터 관련 정보  (0) 2012.08.13
화면에 사용된 View가 많을 때 한번에 리스너 등록하기  (0) 2012.08.07
색상 필터  (2) 2012.07.11
Android 메모리 릭 피하기 번역  (0) 2012.06.12
Android code snippets  (0) 2011.05.11
Posted by 독뽀
,