java - Android O后台联网

标签 java android networking background-process android-8.0-oreo

我正在阅读 Android 8 中的后台服务限制,从我读到的内容来看,您似乎无法长时间在后台运行您的服务。这似乎是合理的,但因为我使用后台服务来保持与服务器的连接——目前正在汇集新内容、发送位置和响应,我有点困惑。响应没问题,我只能在与应用程序交互时响应,但是汇集新内容是有问题的,因为它需要从服务器获取内容,如果有新内容出现,则会向用户显示响应通知。

如果我理解正确,我可以使用 JobScheduler 每隔几秒安排一些工作。我基本上可以安排汇集。对于后台位置,存在这些限制,因此只有前台服务是在请求的时间内获取更新的选项。

我将迁移到 websockets 然后关闭池,与服务器的连接将持续存在并且应用程序将从服务器获取更新,我计划在后台服务中执行此操作以便每次都能从服务器接收内容.但是我似乎不能从 Android 8 开始。你会如何解决这个问题?我应该使用前台服务进行定位和服务器连接吗?或者有没有更好的方法在 android 8 上的 android 应用程序中进行后台网络?

谢谢

最佳答案

以下是在 Android O 上执行后台工作的几个选项:

  • 使用 JobScheduler。您似乎已经很好地掌握了这一点 - 缺点是它是周期性的,而不是持久的。

  • 使用 GCM/FCM 或类似的推送服务在相关时将数据推送到您的应用,而不是持续保持与服务器的连接。

  • Use a foreground service .这将允许您在应用不在前台的情况下继续执行后台工作,但会在状态栏中放置一条通知,告知用户您正在执行该工作。

在选择其中一种方法之前,您应该花点时间退后一步,查看您需要从服务器获取的数据,并确定为什么您需要持久连接以及第一个还是第一个第二个选项可能就足够了。

如果您绝对需要与服务器的持久连接,最后一个选项是您的最佳选择。 O 中的更改背后的想法是仍然允许后台工作,例如您所描述的内容,但要让用户清楚地知道您的应用程序正在这样做。这样,如果他们认为您的数据不如您重要,他们就可以采取行动。

关于java - Android O后台联网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46102495/

相关文章:

java - 嵌入式Jetty 8和无XML的JNDI MySQL连接池的配置

Android onTouchListener 不起作用,仅在 Padding 区域起作用

android - 调试 Android 引擎连接的 Android 项目时出现 NoClassDefFoundError

android - Android如何获取HTTP请求?

java - 在子类中隐藏静态方法时的签名差异

java - Facebook sdk 图片发布失败

java - Maven 将同级项目的二进制文件作为打包的一部分包含在内

android - Android 版 Chrome 根据分辨率以不同方式呈现字体

c - 当你只有一台电脑时,如何模拟两台电脑连接局域网?

java - 使用java测量DNS查找时间