iPhone 4 iOS 5 电池电量监控是不是需要将 setBatteryMonitoringEnabled:NO 添加到定期电池检查?
Posted
技术标签:
【中文标题】iPhone 4 iOS 5 电池电量监控是不是需要将 setBatteryMonitoringEnabled:NO 添加到定期电池检查?【英文标题】:iPhone4 iOS5 battery level monitoring do I need to add setBatteryMonitoringEnabled:NO to periodic battery checks?iPhone 4 iOS 5 电池电量监控是否需要将 setBatteryMonitoringEnabled:NO 添加到定期电池检查? 【发布时间】:2011-11-09 05:50:57 【问题描述】:我正在运行一个应用程序,它可以在一夜之间对加速度计和陀螺仪数据进行采样。这是一项非常耗电的操作,我想教我的应用程序识别电池电量何时变低。
这是我的原型代码,它每 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];
电池检查似乎是在那里执行的,没有异步委托调用。将值设置为 NO 是否会因为不必在一夜之间监控电池电量而节省任何电池电量?将其设置为 NO 会破坏任何东西吗?
感谢您的任何意见!
【问题讨论】:
为什么不将其设置为“是”,让手机在电池电量耗尽时提醒您的应用?这不像是在持续进行民意调查。操作系统进行了一些优化,应该可以很好地调用委托方法。 【参考方案1】:通常认为最好的做法是避免轮询,而是要求系统发出通知,如下所示:
[[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:
电池电量变化通知的发送频率不超过每分钟一次。不要试图计算电池耗尽率或电池剩余时间;排水率可能会经常变化,具体取决于内置应用程序以及您的应用程序。
每分钟一次的频率比您的代码当前检查的频率高 10 倍,同时在 CPU 方面的工作量要少得多。 没有提到,但是什么粒度的更改会导致通知 - 是发送 0.01% 的更改,还是需要 >1% 的更改?
如果您应该将setBatteryMonitoringEnabled
设置回NO
来回答您的其他问题:如果您正在使用通知而不是手动轮询电池状态,那么答案是您必须将其保留在YES
,否则会冒险错过通知。
Apple's official BatteryStatus Sample Code 在电池状态报告中使用了同样的方法。
还有一个UIDeviceBatteryStateDidChangeNotification
,它会在设备放电(使用中)、充电或充满电时通知您。
【讨论】:
以上是关于iPhone 4 iOS 5 电池电量监控是不是需要将 setBatteryMonitoringEnabled:NO 添加到定期电池检查?的主要内容,如果未能解决你的问题,请参考以下文章