【问题标题】:Battery use, what to expect?电池使用,会发生什么?
【发布时间】: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


【解决方案1】:

单独打开屏幕(不运行游戏)将产生类似的电池使用情况。

我对您的建议是,只要您的游戏暂停,或者如果用户在 X 时间内没有触摸屏幕,就将屏幕设置为暗淡,而不是将其保持在全亮状态。

您可以通过调整 screenBrightness/buttonBrightness 来做到这一点,

这些字段的范围是0-> 1

可以看到设置这个here的Context

【讨论】:

  • 但是屏幕的电池使用情况在图表中没有自己的部分吗? (根据我的统计,它使用了 43% 的电池)
  • 是的!确实如此。这仍然会影响电池的总使用量。除了这个和 BicycleDude 的建议之外,我建议阅读这篇文章:developer.android.com/training/monitoring-device-state/…
  • 需要注意的一点是,如果用户将亮度设置为“自动”,那么调暗屏幕效果不佳/根本无法正常工作(尽管它是目前不是优先事项)
【解决方案2】:

贾斯汀的回答很好,但不要忘记一些老派的基础知识。

让您的程序忙于等待也会耗尽电池电量。你必须使用 CPU 来推进游戏,但没有必要让它忙着等待。在游戏处理周期的下一次迭代之前,请务必让您的进程在预计的时间内休眠。

【讨论】:

    猜你喜欢
    • 2013-06-09
    • 2012-04-17
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多