1

我有一个具有服务和主要活动的应用程序。该服务运行倒数计时器并向接收事件的活动发送偶数以在屏幕中绘制/刷新倒数计时器。很简单。现在我正在调查电池使用情况,这是非常非常高的

我打算将计时器抽动从 200 毫秒减少到 800 毫秒,并将可运行的服务线程从 500 减少到 800。我怀疑这必须节省电池。

但有几个问题:

  1. 我的主要问题:当屏幕被锁定(我有部分唤醒锁定)时,android 会继续更新屏幕吗?如果是这样,我可以尝试在屏幕关闭时不发送刷新信息(如何检测屏幕被锁定?)。你认为这有帮助吗?

  2. 您知道编程或应用程序设计中节省电池的最佳实践吗?我一直在寻找有关它的网络,但没有发现任何有趣的东西。

  3. 打开数据库会浪费电池吗?

谢谢

4

2 回答 2

1

1:您可以使用Alarmmanager 来执行更新。(看看这里:android appwidgets

注意:如果设备在更新时间(由 updatePeriodMillis 定义)时处于睡眠状态,则设备将唤醒以执行更新。如果您每小时不更新一次以上,这可能不会对电池寿命造成重大问题。但是,如果您需要更频繁地更新和/或在设备处于睡眠状态时不需要更新,那么您可以改为基于不会唤醒设备的警报执行更新。为此,请使用 AlarmManager 使用 AppWidgetProvider 接收的 Intent 设置警报。将警报类型设置为 ELAPSED_REALTIME 或 RTC,这将仅在设备唤醒时发出警报。然后将 updatePeriodMillis 设置为零(“0”)。

这应该可用于小部件和“正常”活动。

2:我不知道官方文件。但是您应该问自己以下问题:是否有必要经常更新?如果距离活动还有 5 个小时,您需要每秒钟更新一次 GUI 还是每分钟更新一次?您可以级联更新:事件越接近,更新越频繁。

3:我认为不会。

于 2011-11-24T08:53:28.580 回答
0
  1. (取决于您的代码)您的服务继续运行并发送更新事件,消耗 CPU 周期并消耗电力。无论您尝试更新什么活动,它在屏幕锁定后都已暂停。屏幕关闭/屏幕打开有标准广播 - 只需在您的服务中接收它们并停止工作。或者,当要更新的活动收到 onPause() 回调时停止您的服务,并在 onResume() 中重新启动它(如果没有焦点,则无需刷新活动)

  2. 请参阅 1 和 grok android 教程。基本理念:不做无用的事情。

  3. 它不是。除非你在查询。

于 2011-11-24T08:58:20.067 回答