Android-是否正在使用前台服务来防止进程被杀死?

时间:2018-07-24 17:01:55

标签: android android-service

上下文/当前方法

您好,我对使用前台服务感到好奇。我有一个执行语音通信并通过websocket与我们的后端保持持久连接的应用程序。对于我们的用户来说,常见的用例是使我们的应用程序后台运行,并执行其他一些占用大量内存和CPU的事情,尤其是玩手机游戏。

为了防止我们的应用程序进程死于和切断语音连接,我们在应用程序的进程中运行了一个前台服务(本地服务,某些词汇)。实际上,它会显示一条通知,该通知允许用户进行交互并静音/断开/断开通知托盘。所有语音逻辑实际上并不存在于服务中。

我们的假设是,通过运行Foreground Service,我们可以将进程有效地标记为“ foreground”,并且操作系统不太可能杀死我们的应用程序。这还允许用户刷掉我们的应用程序应用程序,并使进程保持活动状态(包括语音连接)。使用adb shell dumpsys activity services和设备设置中的检查器,这似乎可以正常工作,并且看起来与相似产品(Skype,Spotify)的过程/服务签名非常相似。

但是,我们有时仍会听到有关体验用户的应用程序在游戏或流式传输视频时被杀死的消息,即使他们正在通话并且服务正在运行。

现在问问题

经过大量研究,感觉就像我们已经在做正确的事情。但是,我们希望尽可能提高语音稳定性,并解决用户的抱怨。

  1. 我是否已经在做正确的事情,或者我对使用服务“将我们的应用标记为前台优先”的理解存在缺陷? (附录:我花了最后的时间写this question才能出现在我的搜索中。它看起来像我们已经在正确的轨道上了。)
  2. 有什么方法可以验证操作系统确实杀死了我的应用程序进程吗?传统观点说不。但是,我可以想象有一些解决方案会滥用STICKY标志来重新启动服务,登录到我们的服务器,该服务已由操作系统重新启动(因此必须已被操作系统终止),然后又自行停止。 我只是在写作时想到了这一点,所以请原谅我还没有尝试过...
  3. 我们还有其他选择吗?我们应用程序的UI组件并不是特别重量级。这使我认为,即使我们要投资远程服务(在另一个进程中运行),如果操作系统已经终止了我们的前台服务,那么操作系统很可能也将终止该远程服务。我不想使用STICKY来解决这个问题,因为这会带来糟糕的用户体验-对于被动处理数据的服务有意义,但对于主动语音聊天,重新启动“稍后”听起来并不好。 。

非常感谢您抽出宝贵的时间阅读问题,我们很高兴提供任何其他必要的背景信息。

0 个答案:

没有答案