每 10 秒获取一次 PARTIAL_WAKELOCK

Posted

技术标签:

【中文标题】每 10 秒获取一次 PARTIAL_WAKELOCK【英文标题】:Acquiring PARTIAL_WAKELOCK every 10 seconds 【发布时间】:2011-04-13 17:54:09 【问题描述】:

每隔 10 秒获取部分唤醒锁的应用程序是否存在任何问题。我的用例是能够通过设备加速度计持续监控用户的运动。基本上,我有一个服务,它每 10 秒被警报调用一次。

此服务获取唤醒锁,从加速度计获取一些读数以确定当前运动状态,然后释放唤醒锁。服务的总生命周期约为 4 秒。

我的理解是,这会导致设备每分钟保持清醒约 24 秒。虽然不理想,但我希望这仍然是比在我的应用程序的整个生命周期中保持恒定唤醒锁更好的做法。

另一方面,在如此短的时间内获取和释放唤醒锁的行为是否可能对电池寿命同样不利?

感谢任何输入。

【问题讨论】:

为什么需要唤醒屏幕才能访问加速度计? 我没有唤醒屏幕,只是唤醒了 CPU。我正在使用 PARTIAL_WAKELOCK。我每 10 秒唤醒一次设备以检查移动情况,必要时采取行动,然后将其重新休眠 我只是认为您不需要针对您的情况使用唤醒锁。如果在警报响起时调用您的服务,则 cpu 正在处理它。您不必告诉系统您的应用程序想要使用 cpu... 这将对用户的电池寿命产生很大的负面影响。这种情况的程度可能因设备而异。每 10 秒保持唤醒锁定 4 秒意味着您明确地保持设备在 40% 的时间内一直处于唤醒状态。 是的,但越接近 0%,您的用户就会越快乐。您的应用程序使用电池电量所做的事情是否比您的用户在一天结束时有足够的电量拨打电话更重要? :) 【参考方案1】:

正如 cmets 所指出的,这确实不是一个好主意。就像在“市场上的一星评级”类型的一个不好的主意。

加速度计旨在供跑步活动(例如游戏)使用,仅此而已。它绝对不是为您尝试的模式而设计的。

您还假设设备会在您释放WakeLock 后立即进入睡眠状态。这可能是真的,也可能不是。我怀疑你会发现你导致 CPU 的开启时间明显超过 40% 的可用时间,即使你只是强制它开启 40%。

强烈建议您查看Jeff Sharkey's presentation on power usage in android from the 2009 Google I|O conference。

【讨论】:

感谢您的确认。我有一个合理的想法,那就是这种情况。我之前在您之前的一个答案中看过该演示文稿,但无论如何感谢您的链接,这是个好建议!我试图实现这一目标的唯一原因是实现一个 GPS 跟踪应用程序,该应用程序在用户不移动时停止调用 gps(为了节省电池,不少于)。唉,很明显,这种方法很可能会使用尽可能多的电池来节省它,这是一种耻辱。再次感谢,无论如何 @declantraynor:记住加速度!=运动。有人可能正在移动而不是加速(例如,在巡航控制的汽车中)。 是的,这是我在开发此应用程序时一直在考虑的问题。没有什么是简单的! :P 我现在确信以这种方式使用加速度计无论如何都是错误的方法。嗯……回到绘图板!【参考方案2】:

您是否使用过 MyTracks 应用程序? http://code.google.com/p/mytracks/

我上次检查,当用户有活动路径时,他们使用唤醒锁。

我和你有同样的问题 - 虽然我不想使用唤醒锁,但如果操作系统在此过程中杀死应用程序,我的应用程序就会被破坏。现在我们正在这样做,代价是每小时消耗大约 10% 的电池寿命——这还不错。这当然不是很好,但我们的平均路径只有大约 20 分钟。它有效。

使用警报管理器似乎是一条更好的途径。有什么好的例子说明如何在这种情况下使用它?

【讨论】:

以上是关于每 10 秒获取一次 PARTIAL_WAKELOCK的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Forms - 每 10 秒获取一次设备位置(当应用程序在前台/后台运行时)

当应用程序在iOS swift 3中处于后台模式时如何每10秒获取一次纬度和经度

以固定的时间间隔执行for循环,例如。每5秒获取一次图[重复]

Android Flutter App 中的持久后台工作程序,每 30 秒获取一次 Web API

Hangfire 每 15 秒获取一次数据库

每 5 分钟运行一次 Cron 作业,持续 10 秒