gpt4 book ai didi

objective-c - iPhone4 iOS5电池电量监控是否需要添加setBatteryMonitoringEnabled :NO to periodic battery checks?

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:31 26 4
gpt4 key购买 nike

我正在运行一个应用程序,该应用程序会在一夜之间对加速度计和陀螺仪数据进行采样。这是一个非常耗电的操作,我想教我的应用程序识别电池电量何时变低。

这是我的原型(prototype)代码,每 10 分钟检查一次电池电量

NSDate* date = [NSDate date];
if((int)([date timeIntervalSinceReferenceDate])%600 == 0)
{
UIDevice *myDevice = [UIDevice currentDevice];
[myDevice setBatteryMonitoringEnabled:YES];
float batLeft = [myDevice batteryLevel];
int batinfo=(batLeft*100);

[self postStatusMessageWithTitle:nil
description:[NSString stringWithFormat:@"%@ battery level: %i",[dateFormat stringFromDate:dateShow],batinfo]];
[myDevice setBatteryMonitoringEnabled:NO];
}

我的问题是:我是否需要将这一行添加到代码的末尾:

[myDevice setBatteryMonitoringEnabled:NO];

电池检查似乎就在那里执行,没有异步委托(delegate)调用。将值设置为 NO 是否会因为不必在一夜之间监视电池电量而节省电池电量?将其设置为 NO 会破坏任何内容吗?

感谢您的任何意见!

最佳答案

通常认为最好的做法是避免轮询,而是向系统请求通知,如下所示:

[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(batteryLevelUpdate)
name:UIDeviceBatteryLevelDidChangeNotification
object:nil];

...batteryLevelUpdate 看起来像这样:

- (void)batteryLevelUpdate:(NSNotification *)notification
{
// do whatever, using: [[UIDevice currentDevice] batteryLevel]
}

来自UIDevice Class Reference :

Notifications for battery level change are sent no more frequently than once per minute. Do not attempt to calculate battery drainage rate or battery time remaining; drainage rate can change frequently depending on built-in applications as well as your application.

每分钟一次比您的代码当前检查的频率高 10 倍,同时在 CPU 方面花费更少的精力。它没有提到,但是什么粒度的更改会引起通知——是要发送 0.01% 的更改,还是需要 >1% 的更改?

要回答您是否应该将 setBatteryMonitoringEnabled 设置回 NO 的其他问题:如果您正在使用通知而不是手动轮询 batteryStatus 那么答案是您必须将其保留为 YES,否则可能会错过通知。

Apple's official BatteryStatus Sample Code对电池状态报告使用相同的方法。

还有一个 UIDeviceBatteryStateDidChangeNotification 会在设备放电(使用中)、充电或充满电时通知您。

关于objective-c - iPhone4 iOS5电池电量监控是否需要添加setBatteryMonitoringEnabled :NO to periodic battery checks?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8060905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com