제가 게임을 하나 개발중인데
코드 중간에
private void createCushion1(Bitmap cushionColor) {
mAnimTarget = new ImageView(getBaseContext());
mAnimTarget.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
mAnimTarget.setScaleType(ScaleType.MATRIX)
mAnimTarget.setImageBitmap(cushionColor);
mAnimTarget.setImageMatrix(mf);
background.addView(mAnimTarget);
}
이런 코드가 있습니다.
간단히 말하자면 화면에 하나의 이미지(Bitmap)이 있고 이것이 어떤 조건하에 사라지고 다른 이미지(Bitmap)가
생성되는 그런 구성 입니다. mAnimTarget은 ImageView이며 애니매이션효과를 받습니다.
위의 creatCushion1은 이미지를 원하는 위치와 이미지파일을 보여주는 메소드이고
다른 메소드에서 조건이 성립되면 전달인자(cushionColor)가 바뀌면서 다른 이미지가 생성되는 그런 흐름입니다.
어느정도 완성은 되엇는데.. 문제가 한가지 있습니다
어플의 실행 초기는 부드럽게 잘 돌아가는데 후반으로 갈 수록 애니매이션의 버벅거림이 늘어납니다.
제 생각엔 메소드 첫번째 줄에 자꾸 new해서 메모리를 잡아먹는것 때문에 버벅거리는듯 합니다.
BitmapFactory도 사용하지 않았고 조건문에서 위의 코드를 불러내기전에 background.removeView(mAnimTarget);도
사용중이고 스레드를 이용하여 10초 마다 GC가 돌아가게하여
메모리를 최대한 잡아보려 하는데 무엇이 문제인지 도와주셧으면 좋겠습니다.
코드가 길어져서 다 올리지 못하고 질문이 있으시면 댓글로 남겨드리겠습니다 ㅠㅠ
createCushion1 메서드가 호출되는 주기가 어떻게 되나요?
eclipse 사용하신다면 method profiling 하시면 도움이 되실것 같네요.
앱을 실행하시고 stop 버튼 왼쪽에 있는 start method profiling 아이콘을 클릭하시고 앱을 이리 저리 실행시켜서 버벅거리게 하신 후
다시 한번 그 아이콘을 클릭하시면 로그가 새창으로 뜰거게요 :) 거기서 Incl Cpu Time 항목이 높은 녀석들을 살펴보세요~
Name 컬럼에서 질문자님의 앱 패키지 이름으로 시작되는 부분에서먼저 찾아보시면 될듯
mAnimTarget을 null체크해서 new 및 하기의 addview를 해주시면 안느려질 것으로 예상됩니다.
addview를 여러번 부른다는 것 자체가 메모리에 쌓이거든요.