【问题标题】:"Battery saver" feature killing my music service“省电”功能杀死了我的音乐服务
【发布时间】:2016-03-28 23:59:25
【问题描述】:

我正在为 Android 构建音乐流媒体应用。

在这个应用程序中,我有一个Service,它负责播放来自 HTTP 服务器的音频。在玩之前,我确保startForeground() 并获得部分WakeLock,这样我的服务就不会被杀死。我也收到了WifiLock,以防万一。

只要我的手机没有处于“省电模式”,该服务就可以正常工作。当我打开省电模式并断开手机与电源的连接时,我的服务就被烧毁了!

不幸的是,onDestroy() 似乎没有被调用,所以我来自startForeground() 的通知仍然可见,即使该服务已死。

手机是三星 Galaxy S6,搭载 Android 6.0.1。

两个问题:

  1. 有没有什么方法可以让服务保持运行,尽管有节电设备?
  2. 如果没有,我想至少知道我的服务何时被终止,以便进行一些清理(删除通知和内部内容)。

有什么建议吗?

【问题讨论】:

  • 您找到解决此问题的方法了吗?我有类似的情况 - 根据设备和确切的 Android 版本,应用程序或 wifi 连接会停止,忽略所有唤醒锁
  • 我不知道有什么解决办法。不确定它实际上是否已在 Android 7 中修复...我的应用程序不是唯一的:甚至 google 音乐和 spotify 也有问题。
  • Android 7 仍然存在问题。感谢您提供信息。

标签: android service streaming


【解决方案1】:

这可以通过使用前台服务在单独的进程中持有部分唤醒锁来实现。

android:process="process_name"

(文档:http://developer.android.com/guide/topics/manifest/service-element.html

请注意,您不应在多进程环境中使用SharedPreferences

另请参阅此问题:https://code.google.com/p/android/issues/detail?id=193802

【讨论】:

  • 不幸的是,这似乎不起作用,除非我做错了什么。我已经为应用程序和服务设置了不同的流程,但仍然没有改进。像<application android:process=":org.aspyct.myapp"><service android:process=":org.aspyct.myapp.service"/> 这样的东西。你能看出哪里不对劲吗?
  • 我认为这是为了将服务放在单独的进程中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多