根据 android 后台服务,三星手机是否存在已知问题?

Are there known issues with Samsung phones according android background services?

我正在 Java 中使用 Android Studio 开发 Android 应用程序,它应该执行以下操作: 连接一台或多台 BLE 设备,并在后台长时间(4-10 小时)接收这些设备的 GATT 通知。 我为此编写了一个服务,它在收到临界值时向我发送 android 通知,并且仅在打开应用程序时将数据交给我的 Activity。

整个过程在我正在测试的 LG G6 以及华为 Mate 10 Pro 上都运行良好。 现在我想在三星 S9(和 S8)上尝试相同的应用程序,结果是后台服务在 2 或 3 分钟后停止...

我 运行 遍历了我发现的 phone 的每个能量设置,我认为它可能会导致这个问题,但我什么也没发现。

因此我的问题是:三星与 LG 和华为有何不同?有任何已知问题吗?我不知道,可能是什么问题。

问题确实是,我没有像HarmenH在评论中所说的那样使用前台服务。由于我使用前台服务而不是绑定服务,因此每个 phone 上的一切都按预期工作。 我无法告诉您为什么不同 phone 之间的行为会有所不同,但由于我使用了正确的方式,所以这不再重要了。 如果您遇到类似问题,我建议您深入研究 Android services overview

Android的契约规定,只要绑定上下文还在scope/alive,它就不会杀死绑定的服务。

假设您有进程 A,并在其应用程序上下文中绑定另一个进程(进程 B)的服务。只要进程 A 还活着,就不应终止该服务。

如果您想额外确保绑定进程(进程 A)在 process/service 绑定(进程 B)被杀死之前被 OS reaped/killed,从客户端绑定服务时可以使用 BIND_ABOVE_CLIENT 标志。 (参见 https://developer.android.com/reference/android/content/Context#BIND_ABOVE_CLIENT

我发现现实中kill掉主进程的时候,OS往往会先kill掉绑定的进程。也就是说,如果绑定进程尝试与绑定进程通信作为清理 (onDestroy) 操作的一部分,它可能会在写入时遇到 RemoteException。绑定客户端还可以在绑定过程断开时收到 onServiceDisconnected 回调。

似乎对于一些制造商来说,在后台被粘性服务打开的应用程序随后很快就会被杀死,并且会导致很多这些短暂的服务异常,这在 metrics/analytics.

实际上,即使在三星手机上,我的团队也没有找到名义上运行的绑定进程实例来断开与绑定服务的连接。