2012-04-27 172 views
1

我刚刚开发了Android应用程序,它是一款游戏,但我没有使用3D图形。这是一个棋盘游戏,我在屏幕上移动ImageViews。由于现在我还没有在移动设备上测试它,只是在仿真器上进行测试。问题是,当我在三星Galaxy S2手机上运行我的应用程序时(双矿:),CPU使用率高达85%,该死的手机升温:当我杀死进程时(完全关闭应用程序,所以它不会在后台运行)它下降到0 :)Android。 CPU使用率太高

我甚至不知道从哪里开始解决问题。你们能给我一个主意吗?

我只能想到的这这件事会发生原因有两个,但他们可能是愚蠢的原因:1,我有2个线程,每个线程具有无限while循环

  • 与UI线程例外它循环不定,并查看每个线程的消息队列中是否有消息。情况会是这样吗?我应该延迟几毫秒这些循环,所以他们不跑得这么快?
  • 我还在屏幕上使用了大约20-25个imageViews,我通过触摸移动。那些与这有什么关系?

有没有办法从模拟器检查内存泄漏或SOMETHING ...?

如果有人可以提供一些建议,我应该如何处理这个问题,我会很感激。

+1

一个好的开始可能是MemoryAnalyzer:http://www.eclipse.org/mat/ – noli 2012-04-27 09:42:17

回答

4

“我有2个以上线程,每一个具有无限while循环,其 周期不定,如果有在每个线程的消息 队列中的任何消息看起来”

上述事情听起来可疑对我来说。而不是在你自己的线程中使用无限循环,你应该真的使用Handler这是专门为此目的而设计的。

作为从开发者的网站:

一个处理程序允许您发送和一个线程的MessageQueue关联的过程信息和Runnable对象 。每个处理程序实例是与单个线程和该线程的消息队列关联的 。

有一个处理程序两种主要用途:作为 某些时候要执行的未来

  • 入队的动作来在不同的线程比进行

    1. 调度信息和可运行的 自己
  • 此外,在Eclipse DDMS标签会给你所有需要用于调查CPU的过度使用的工具。