我正在用Java的Android开发一个Android应用程序,它应该做以下事情:连接一个或多个BLE设备,并在后台接收关贸总协定(GATT)的通知(4-10小时)。为此,我编写了一个服务,在收到临界值时向我发送android通知,并且只在打开应用程序时将数据传递给我的活动。
整个事情工作良好的LG G6,我正在测试,并在华为的配偶10专业。现在我想在三星的S9 (和S8)上尝试相同的应用程序,结果是后台服务在2到3分钟后停止了.
我已经试过手机的每一种能量设置,我发现,我认为它会引起这个麻烦,但我什么也没有发现。
因此,我的问题是:三星与LG和华为有什么不同?有什么已知的问题吗?我不知道,可能是什么问题。
发布于 2020-09-29 05:49:16
问题确实是,我没有使用像HarmenH在评论中提到的前台服务。因为我使用前台服务而不是绑定服务,所以每部手机上的一切都像预期的那样工作。我不能告诉你为什么不同手机之间的行为会有分歧,但既然我使用正确的方式,那就不再重要了。如果您遇到了类似的问题,我建议您深入Android服务概述。
发布于 2021-02-11 04:12:48
Android的合同规定,只要绑定上下文仍然在范围/活动中,它就不会扼杀绑定服务。
假设您有进程A,并在其应用程序上下文中绑定另一个进程的(Process )服务。只要进程A还活着,就不应该杀死这支部队。
如果您想确保绑定进程(进程A)将在其绑定的进程/服务(进程B)被杀死之前由操作系统获取/终止,则可以在从客户端绑定服务时使用BIND_ABOVE_CLIENT标志。(见客户端)
我发现,在现实中,当杀死主进程时,操作系统通常会首先杀死绑定进程。也就是说,当绑定进程试图作为清理(onDestroy)操作的一部分与绑定进程通信时,它在编写时可能会遇到一个RemoteException。绑定客户端还可以在绑定过程断开时接收onServiceDisconnected回调。
对于一些制造商来说,由后台的粘性服务打开的应用程序随后很快就会被杀死,并可能导致许多这些短暂的服务异常,这在度量/分析中可能看起来很糟糕。
实际上,我的团队还没有找到绑定过程的实例(它名义上是操作的)来断开绑定服务的连接,甚至在Samsungs上也是如此。
https://stackoverflow.com/questions/61114408
复制相似问题