2012-04-27 3 views
1

Я только что разработал приложение для Android, это игра, но я не использую 3D-графику. Это настольная игра, в которой я перемещаю ImageViews на экране. С тех пор я еще не тестировал его на мобильном устройстве, только на эмуляторе. Проблема заключается в том, что когда я запускаю свое приложение на телефоне Samsung Galaxy S2 (dual ore :(), использование CPU увеличивается до 85%, а проклятый телефон нагревается: D, когда я убиваю процесс (полностью закрываю приложение, поэтому он не работает в фоновом режиме), он уменьшается до 0 :)Android. Слишком много использования ЦП

Я даже не знаю, с чего начать исправление проблемы. Не могли бы вы, ребята, дать мне представление?

я могу думать только о двух причинах, по которым это может произойти, но они могут быть глупые причины:

  • За исключением потока пользовательского интерфейса, у меня есть еще 2 нити, каждая из которых имеет бесконечное время цикла который циклически неопределен и выглядит, если есть какие-либо сообщения в очереди сообщений каждого потока. Может ли так быть? Должен ли я задерживать эти петли в пару миллисекунд, чтобы они не работали так быстро?
  • Я также использую около 20-25 изображений на экране, с которыми я перемещаюсь с помощью touch. Могут ли они иметь какое-либо отношение к этому?

Есть ли способ проверить утечку памяти или SOMETHING ... из эмулятора?

Если кто-нибудь может предложить некоторые советы о том, как я должен подходить к этой проблеме, я был бы благодарен.

+1

хорошим началом может быть MemoryAnalyzer: http://www.eclipse.org/mat/ – noli

ответ

4

«У меня есть еще 2 нити, каждая из которых имеет бесконечное время цикла, который циклы неопределенны и выглядит, если есть какие-либо сообщения в очереди каждого потока сообщений »

выше вещь звучит подозрительно мне. Вместо использования бесконечного цикла в вашем собственном потоке вы должны действительно использовать Handler, который предназначен именно для этой цели.

Как с сайта разработчика:

обработчиком позволяет передавать и обрабатывать сообщений и Runnable объекты , связанные с MessageQueue потока. Каждый экземпляр Handler имеет значение , связанное с одним потоком и очереди сообщений этого потока.

Есть два основных способа применения Обработчика:

  1. запланировать сообщения и runnables быть выполнены в какой-то момент в будущее
  2. в Епдиеие действие, которое будет выполняться в другом потоке, чем ваш собственный

Кроме того, DDMS вкладка в Eclipse, даст вам все требуемые инструменты для исследования избыточного использования процессора.

Смежные вопросы