我正在尝试以50毫秒的时间收集加速度计值,并且每1分钟对收集的值执行一些操作。所以我使用带有RTC_WAKEUP标志的1分钟待定意图的报警管理器,并将传感器事件设置为50ms。首先看起来传感器事件被准确地称为精确时间段并且即使在我的设备屏幕关闭时每隔一分钟收集1150~1210加速度计值,但是当我从计算机上拔下我的设备并关闭屏幕电源时,它开始变慢,最后每1分钟只收集60~100个样本。 所以我现在一直收购Wakelock并用计时器替换报警管理器,每1分钟做一次定时器任务。但我担心电池耗尽。
所以我想问你的是“
1)当设备插入计算机或充电器时,设备是否处于唤醒状态?
2)什么方法可以更好地延长电池寿命?使用警报器每隔2秒获取一次唤醒锁,以保持设备清醒并在达到1分钟时做一些事情?或者使用当前获取Wakelock的方法来使设备保持活动并使用计时器每1分钟做一次事情?
答案 0 :(得分:0)
我发现手机只有在插入电脑后才能存活。从计算机上拔下电源后,几分钟后手机放慢了收集传感器的速度。所以我每2秒更改一次 AlarmManager 以触发警报意图来执行计时任务和保持设备唤醒。但电话有时并没有在准确的时间每2秒发出警报意图,这对我的申请目的至关重要。所以我改变了保持手机活动的方法,使用 AlarmManager 来保持 Wakelock 整个时间并使用计时器和 Timertask 做时间任务。在计时器完成所有计时任务之后,它就会释放唤醒锁。传感器事件内的代码只收集样本并将样本放入队列和定时器任务中每2秒,它使用fft将收集的样本转换到频域,这需要大量的计算。
我读了很多帖子,说到电池续航时,拿着唤醒锁是非常低效的。但是当我拿着唤醒锁时,我检查了每个计时器任务和处理传感器事件期间的CPU使用情况,每个2秒和50毫秒。它只使用了每秒CPU总使用量的0.71~1.75%!!我认为电池续航时间并不坏。因此,我再次测试,在定时器任务和传感器事件的同一时间内按住唤醒锁7小时。结果是它使用了不到10%的电池,并且每50秒收集几乎精确的传感器值样本,并且每2秒几乎完全计时器任务!!
由于每个计时器任务和传感器事件中代码的重量,我反对更多的电池使用。我很高兴知道,如果我仔细设计计时任务代码,即使拿着唤醒锁并保持手机的CPU保持活跃,电池续航时间并没有那么糟糕!