我正在开发一个应用程序,它使用MediaPlayer对象来播放WallpaperService中的H.264 MP4视频,因为它是一个实时的墙纸应用程序。如果我使用mediaPlayer.pause()或mediaPlayer.stop()暂停/停止MediaPlayer,当设备(Nexus5,Android6.0.1)处于空闲和休眠状态时,电池会耗尽。通宵多次测试,排水率约为3-7%/小时。只要我使用mediaPlayer.release()释放媒体播放器,电池消耗就会恢复到更正常的1%/小时。当onVisibilityChanged调用false时,我暂停/停止mediaPlayer。据报道,这款手机将在常规Android电池图表和更好的电池状态下进入睡眠状态。
如果CPU成功进入休眠状态,如何解释这种电池耗尽?
编辑:我新发现的一件事是,当在mediaPlayer.pause()之前调用mediaPlayer.setSurface(null)时,空闲电池的使用就会恢复正常。然后,我可以在mediaPlayer.start()之前执行mediaPlayer.setSurface(表面)来设置它。问题是在重启后的几秒钟内会有一些黑色的伪像。
发布于 2016-01-03 02:52:36
我不能给你一个确切的答案,但可以告诉你要寻找什么。我怀疑所发生的情况是pause()检查事件的频率足够高,以防止处理器进入更深的睡眠/C状态。相反,stop()不需要检查事件,因此允许处理器进入深度睡眠状态。几年前我写过an article on sleep states。
我怀疑函数的编写者决定更频繁地检查,而不是必要的。这是一个非常常见的错误,因为开发人员认为更短的睡眠/更频繁的检查会导致更好的响应(实际上几乎从来没有)。您可以通过使用处理器电源监视器来检查这一点,该监视器实际检查硬件睡眠状态。不幸的是,大多数不会而且只检查独立于处理器的“等价物”。
让我们回到你的问题上:你能做些什么呢?我可以给你一些建议,但没有一个是非常令人满意的:
之前,它会使用另一个媒体播放器在谷歌上执行此操作
就像我说的,所有这些都不是很令人满意。顺便说一下,我在网上搜索,发现有证据表明,在新的Android版本中,这种情况不止一次发生过。
祝你好运,并让我们知道发生了什么。
https://stackoverflow.com/questions/34456437
复制相似问题