【问题标题】:Lifecycle of Android Services differs between phonesAndroid服务的生命周期因手机而异
【发布时间】:2016-12-18 19:55:10
【问题描述】:

我正在尝试让服务在 Activity 生命周期之后保持活跃。

在两部手机(Samsung Galaxy S6 和 Sony Xperia Z3 Compact)上,在与 Activity 不同的进程中启动 Activity,然后在 Service 可见且显示通知时滑动删除应用程序以保持服务处于活动状态。

在第三部手机上,华为荣耀 8 完全相同的代码会破坏服务并立即取消任何预定的警报。

我每 10 秒安排一次警报(它们在华为上会立即取消,而在三星/索尼上可以使用)。并在后台运行服务时激活 LocationListener。

另一个区别是,工作手机上的优先 MAX 和正在进行的通知不能通过滑动或清除来取消,但在华为上也是可以的。

我已要求忽略电池优化和其他设置,没有任何区别。我还尝试寻找在屏幕关闭时不杀死应用程序的选项,华为似乎也立即这样做了。

在这种情况下,可以做些什么来保持服务在 Activity 被终止或只是没有主动运行后继续运行。如果内存不足,则活动会继续,但服务不会,因为它几乎不会消耗任何内存。但是使用此设置,服务会立即终止。

我是否正在查看我可能无法通过代码预测或控制的特定制造设置?

对于此类问题,我能看到的唯一可能的解决方案是向系统发送静默推送,检查服务是否非常频繁地处于活动状态,然后在它应该处于活动状态时重新启动它(由于用户选择这样做但系统无论如何都要杀死它)。

【问题讨论】:

  • 我不知道解决方案是什么,但是如果您在 Play 商店中分发并且找不到修复程序,您可以从支持的设备列表中排除有问题的设备。跨度>
  • 华为有一个“不要在屏幕关闭时杀死应用程序”的选项,但尚未找到通过代码设置此值的选项,并且使用电池优化似乎没有效果,因为它不会改变它允许。

标签: android android-activity service lifecycle


【解决方案1】:

对于华为设备,存在一个问题,您可以从“通知”面板中刷掉正在进行的通知。这已被注册为一个问题,因为它不应该表现得像那样,并且已经修复并且可以在新的更新上正常工作。

关于当您从最近的活动中关闭任务时服务被杀死,这是因为华为有一个名为 HwSystemManager(PhoneManager) 的系统应用程序来执行此任务。如果您进入PhoneManager并在受保护的应用程序下,将您的应用程序启用为受保护的应用程序,那么它不会杀死您的服务并且您的应用程序可能会在后台存活很长一段时间,直到并且除非出现内存不足的情况。

【讨论】:

  • 是的,我已经想通了。我的问题更像是 - 我如何提示用户解决这个问题?我知道有些手机有一些设置,您可以调用这些设置来覆盖自定义系统设置的特定值。在按计划使用服务之前可能需要特殊提示的电话类似的东西或某种识别 - 不是在特定时间运行,只有在用户选择这样做时 - 但如果它在屏幕关闭时立即被杀死,那就是破坏这是目的。
  • @Deukalion 我在华为工作过,所以我敢肯定,如果它不添加到受保护的应用程序列表中,它将被杀死。我们确实将所有最常用的应用程序和系统应用程序添加到受保护列表中
  • @Deukalion 这种行为是为了设备的高性能和长时间运行而保留的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多