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

时间:2018-02-27 19:09:04

标签: android socket.io

我正在使用Socket.io库开发多人游戏。它运作良好。 但是,在Android 7.0及更高版本中,当我的应用程序处于后台时,系统会自动暂停所有网络工作。 (我必须保持我的套接字连接)。 我正如here所描述的那样研究它。 但是,我无法理解。所以,请为此提供解决方案。

1 个答案:

答案 0 :(得分:3)

不幸的是,有关于此的坏消息和一些好消息。

为:

由于android marshmallow及以上,有一个打盹模式的概念。如果设备保持一段时间(无法确认此时间并且谷歌没有透露),设备将进入打盹模式并暂停所有网络活动。将有短暂的维护窗口,您可以在其中进行同步和填充。小的解决方法,不要针对23 + apis,我说小,因为我发现这在某些手机上不起作用。另一种可能绕过此问题的方法是将您的应用程序列入电池限制白名单,但根据Google指南,我认为您的应用不符合此条件。

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

好:

您可能不想真正保持套接字打开。而是选择同步突发。我个人每隔30-60分左右就有一份工作要尝试同步。

您可以利用JobScheduler apis,它会自动处理打盹模式和内容,您可以在有互联网连接时定期运行它们。在作业运行时,您可以连接到服务器,执行操作并关闭套接字。这是谷歌想要的,并正在推动所有开发者。

另一种选择是让前台服务显示活动通知,该服务将通过套接字不断连接。这对用户是可见的,它不仅会让他们厌倦你不断使用他们的数据,它也可能对电池不利。另一种方法是使用作业调度程序定期调度和运行前台服务,以便透明,同时每隔一段时间同步一次数据。后一种方法是WhatsApp所做的,它们有一个运行的工作,它会偶尔将所有传入的消息与前台服务同步。

简而言之:

你将永远无法保持活力。您可以尝试使用我目前所描述和知道的方法之一进行突发(可能还有其他我不知道的替代方案,我已经测试了这些并且它们可以工作)你将不得不妥协,抱歉。