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 添加到定期电池检查?的主要内容,如果未能解决你的问题,请参考以下文章

检测到电池警告显示 iPhone

苹果11怎么设置显示电池

iPhone11pro显示电量 怎样能显示电量

iOS:如何正确获得电池电量

iOS 13.6 续航对比出炉,成绩垫底/ iPhone 12 电池容量曝光/ iOS 13.5.1 验证关闭

苹果电量百分比在哪里设置