首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不释放MediaPlayer会导致电池耗尽

不释放MediaPlayer会导致电池耗尽
EN

Stack Overflow用户
提问于 2015-12-25 02:08:21
回答 1查看 415关注 0票数 1

我正在开发一个应用程序,它使用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(表面)来设置它。问题是在重启后的几秒钟内会有一些黑色的伪像。

EN

回答 1

Stack Overflow用户

发布于 2016-01-03 02:52:36

我不能给你一个确切的答案,但可以告诉你要寻找什么。我怀疑所发生的情况是pause()检查事件的频率足够高,以防止处理器进入更深的睡眠/C状态。相反,stop()不需要检查事件,因此允许处理器进入深度睡眠状态。几年前我写过an article on sleep states

我怀疑函数的编写者决定更频繁地检查,而不是必要的。这是一个非常常见的错误,因为开发人员认为更短的睡眠/更频繁的检查会导致更好的响应(实际上几乎从来没有)。您可以通过使用处理器电源监视器来检查这一点,该监视器实际检查硬件睡眠状态。不幸的是,大多数不会而且只检查独立于处理器的“等价物”。

让我们回到你的问题上:你能做些什么呢?我可以给你一些建议,但没有一个是非常令人满意的:

  1. 检查允许您设置pause()的检查间隔的API或数据结构。顺便说一下,我不知道。
  2. 你自己写吧。当然,这会使编写独立于平台的应用程序变得复杂,因为在
  3. 修复

之前,它会使用另一个媒体播放器在谷歌上执行此操作

就像我说的,所有这些都不是很令人满意。顺便说一下,我在网上搜索,发现有证据表明,在新的Android版本中,这种情况不止一次发生过。

祝你好运,并让我们知道发生了什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34456437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档