2012-04-27 3 views
1

방금 ​​Android 용 앱을 개발했지만 게임이지만 3D 그래픽을 사용하지 않습니다. 이 게임은 스크린에서 이미지 뷰를 움직이는 보드 게임입니다. 지금부터 에뮬레이터에서만 모바일 장치에서 아직 테스트하지 않았습니다. 문제는 삼성 Galaxy S2 휴대 전화 (이중 광석 :()에서 내 앱을 실행할 때 CPU 사용률이 최대 85 %까지 올라가고 망할 전화가 뜨거워집니다. D는 프로세스를 종료 할 때 (앱을 완전히 종료하므로 백그라운드에서 실행되지 않음) 0으로 내려갑니다.Android. 너무 많은 CPU 사용량

어디서 문제를 해결할 지조차 모르겠습니다. 너희들이 내게 아이디어를 줄 수 있니?

나는 단지이 발생할 수있는 두 가지 이유를 생각할 수 있지만, 그들은 바보 같은 이유가있을 수 있습니다, 나는이 개 더 많은 스레드는 루프 동안 각각 갖는 무한,이 UI 스레드를 제외하고

  • 각 스레드의 메시지 대기열에 메시지가 있는지 여부를 알기 쉽게 표시합니다. 이것이 사실 일 수 있습니까? 이 루프에 몇 밀리 초의 지연을 넣어야합니까? 그렇게 빨리 실행되지는 않습니까?
  • 나는 터치를 통해 주위를 돌고있는 화면에서 약 20-25 이미지 뷰를 사용하고 있습니다. 그 사람들이 이것과 관련이있을 수 있습니까?

에뮬레이터에서 메모리 누수 또는 무언가를 확인하는 방법이 있습니까?

누구든지 내가이 문제에 어떻게 접근해야하는지에 대해 조언을 해줄 수 있다면 감사 할 것입니다.

+1

좋은 시작은 MemoryAnalyzer : http://www.eclipse.org/mat/ 일 수 있습니다. – noli

답변

4

"나는이 개 더 많은 스레드를 가지고, 각각의 무한을 가진 루프하는 사이클 부정과 각 스레드의 메시지 큐에 메시지가 있는지를 찾는 동안"

위의 점은 의심스러운 소리 나에게. 자신의 스레드에서 무한 루프를 사용하는 대신 정확하게이 목적을 위해 설계된 Handler을 사용해야합니다. 개발자의 사이트로

:

핸들러는 전송 및 스레드의 MessageQueue가와 관련된 프로세스 메시지와의 Runnable 객체 할 수 있습니다. 각 Handler 인스턴스는 단일 스레드 및 해당 스레드의 메시지 큐와 연관된 입니다.

Handler를위한 두 가지 용도가 있습니다

  1. 메시지와보다 Runnable를 예약하는 것보다 다른 스레드에서 수행 될 의 어느 시점으로 작업을 대기열에있는 미래
  2. 을 실행하는이 는

게다가, Eclipse에서 DDMS 탭은 모든 필요한에게 자신의 줄 것이다 도구를 사용하여 과도한 CPU 사용을 조사합니다.