您好,我对使用前台服务感到好奇。我有一个执行语音通信并通过websocket与我们的后端保持持久连接的应用程序。对于我们的用户来说,常见的用例是使我们的应用程序后台运行,并执行其他一些占用大量内存和CPU的事情,尤其是玩手机游戏。
为了防止我们的应用程序进程死于和切断语音连接,我们在应用程序的进程中运行了一个前台服务(本地服务,某些词汇)。实际上,它会显示一条通知,该通知允许用户进行交互并静音/断开/断开通知托盘。所有语音逻辑实际上并不存在于服务中。
我们的假设是,通过运行Foreground Service,我们可以将进程有效地标记为“ foreground”,并且操作系统不太可能杀死我们的应用程序。这还允许用户刷掉我们的应用程序应用程序,并使进程保持活动状态(包括语音连接)。使用adb shell dumpsys activity services
和设备设置中的检查器,这似乎可以正常工作,并且看起来与相似产品(Skype,Spotify)的过程/服务签名非常相似。
但是,我们有时仍会听到有关体验用户的应用程序在游戏或流式传输视频时被杀死的消息,即使他们正在通话并且服务正在运行。
经过大量研究,感觉就像我们已经在做正确的事情。但是,我们希望尽可能提高语音稳定性,并解决用户的抱怨。
STICKY
标志来重新启动服务,登录到我们的服务器,该服务已由操作系统重新启动(因此必须已被操作系统终止),然后又自行停止。 我只是在写作时想到了这一点,所以请原谅我还没有尝试过... STICKY
来解决这个问题,因为这会带来糟糕的用户体验-对于被动处理数据的服务有意义,但对于主动语音聊天,重新启动“稍后”听起来并不好。 。非常感谢您抽出宝贵的时间阅读问题,我们很高兴提供任何其他必要的背景信息。