【发布时间】:2012-03-02 07:58:21
【问题描述】:
我正在为 Android 制作 2D 游戏,我最近一直在研究优化。
我在“设置”中查看了电池使用情况,发现在将我的游戏置于前台(屏幕打开)一个多小时后,我已经耗尽了 11% 的电池(摩托罗拉 Xoom Honeycomb)。
这是用户对手机/平板电脑游戏的期望吗?
一点信息:
我的游戏使用 Opengl-es 进行渲染(连续渲染)
逻辑在单独的线程中运行以提高性能。
我使用了 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);认为这是必要的,因为游戏需要用户一点思考时间。
简单粒子
那么,这样的电池消耗对于游戏来说是正常的吗?
我可以采取哪些措施来减少电池消耗?
【问题讨论】:
-
如果你可以在你的各种线程中安排小的
Thread.wait(timeout),它将消除CPU的负担,因此对电池来说更好。也就是说,如果您最近更新了屏幕,您实际上可以等待,例如,至少 20 毫秒(50 赫兹)才能再次更新。 -
@BicycleDude 这是个好主意。在游戏的某些部分,它仍然需要 30fps,但这听起来不错。
-
@BicycleDude 是 Thread.sleep 类似的东西吗?
-
@Jack:是的,就你的目的而言,使用
Thread.wait(timeout)或Thread.sleep(timeout)几乎是一回事。 -
添加此延迟的问题在于,如果您的渲染代码通常需要 5 毫秒,极端情况下需要 20 毫秒,那么您的帧速率将会下降。获得恒定渲染速率的一种解决方案是测量渲染时间并从睡眠时间中减去该时间,这样无论渲染时间还是渲染时间,下一帧都是均匀间隔且一致的。
标签: java android multithreading performance power-management