如何在android 7.0及更高版本中保持活动套接字连接?

Abh*_*iya 3 android socket.io

我正在使用Socket.io库开发多人游戏。它运作良好。但是,在android 7.0及更高版本中,当我的应用程序处于后台时,系统会自动暂停所有网络工作。(并且我必须保持我的套接字连接保持活动状态)。我考证一下它的描述在这里。但是,我听不懂。因此,请为此提供解决方案。

Kus*_*han 5

不幸的是,在这方面有一个坏消息和一些好消息。

坏:

由于android棉花糖及以上版本,因此有了打ze模式的概念。如果设备保持放置状态一段时间(无法确认其持续时间,并且未由Google披露),则设备将进入打do模式并暂停所有网络活动。维护时段短,您可以在其中执行同步和操作。较小的解决方法,不要针对23种以上的api,我说的很小,因为我观察到这在某些手机上不起作用。另一种可能绕过此方法的方法是将您的应用从电池限制列入白名单,但是根据Google指南,我认为您的应用不符合要求。

更糟糕的消息是,从API 26开始,当应用程序完全处于后台并且没有可见的组件(通知或前台服务等)时,后台服务也将完全暂停。所以奥利奥会更糟。

好:

您可能并不真的想一直保持套接字打开状态。而是选择同步突发。我个人每30到60分钟左右运行一次作业,以尝试进行同步。

您可以利用JobScheduler api,它将自动处理打ze模式和东西,并且可以使它们在有互联网连接时定期运行。在作业运行时,您可以连接到服务器,执行操作并关闭套接字。这就是Google想要的,并且正在将所有开发人员推向目标。

另一个选择是让前台服务显示活动的通知,并通过您的套接字不断连接该通知。这将对用户可见,不仅使他们烦恼您一直在使用他们的数据,而且还可能对电池不利。另一个替代方法是使用作业调度程序定期调度和运行前台服务,以保持透明,同时还不时地同步数据。后一种方法是WhatsApp所做的,它们有一个正在运行的作业,该作业会不时地将所有传入消息与前台服务同步。

简而言之:

您将无法始终保持它的生命。您可以尝试使用我目前描述和了解的一种方法来突发操作(也许还有其他我不知道的替代方法,我已经测试了这些方法并且它们起作用了),您将不得不妥协,抱歉。