gpt4 book ai didi

java - 建议我一些在 Android oreo 中保持 socket-io 连接的良好做法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:54:07 27 4
gpt4 key购买 nike

Android Oreo (>25) 不再鼓励后台服务。我希望套接字在我的聊天应用程序中保持连接,即使应用程序关闭也是如此。如何实现 android 26 的新变化?

有人说,用JobIntentService

有人说,用JobService

有人说,用JobScheduler

有人说,启动服务为前台服务

如有任何帮助,我们将不胜感激。

最佳答案

我在开发聊天应用程序时遇到了完全相同的问题,所以我知道您的痛苦。我们的结论是:

you don't keep a connection alive 24/7, if you need to deliver a message to an user that has no connection alive, send a push message via Firebase.

如果你想在后台保持连接存活,你会面临很多问题。第一个针对 Oreo,如果您的应用程序处于后台(在此上下文中“后台”的定义为 here ),则不允许运行,除非时间窗口很短。

你绝对可以使用 JobScheduler 来运行周期性任务,它们不会以精确的间隔或时间执行以减少电池使用(这很好)但它不会帮助你保持连接还活着。充其量,您可以使用 JobScheduler 定期从您的服务器拉取消息。为了使用 JobScheduler,您需要创建一个 JobService 类。

JobIntentService 是支持库 API 26 中引入的新类。它是 IntentService 的替代品,它将在 android API 26+ 上作为 JobService 运行,并作为 Service(类似于 IntentService 在某种意义上它会在后台线程中执行代码)在旧的 API 上。在 Oreo 上,它的后台执行仍然会受到限制,因此它不会帮助您保持连接。

使用前台 Service 确实可以帮助您降低进程被终止的可能性,但是,您需要显示永久通知。这听起来不像是聊天应用的好解决方案。

如果您仍然认为保持 24/7 连接是可行的选择,您还需要考虑 hibernate 模式。您可以要求用户将您的应用列入白名单,即使在打瞌睡模式下也能运行,但您应该有充分的理由这样做。同样,您将面临 Oreo 中的其他 bg 执行限制。

您将面临的另一个问题是其他应用。有些资源管理应用程序会主动杀死 bg 中的其他应用程序,以减少内存和电池使用量。比如我骂了this one相当多。

另一个问题是由 android 创建的。当系统内存不足时,它会开始杀死 bg 中的应用程序进程。有一个他们被杀死的顺序,如果我没记错的话应该考虑上次它在 fg 中的时间和当前的内存使用情况。这不是最糟糕的问题,但它仍然会发生。

那么,如果我仍然不能说服您放弃永久连接的想法,让我与您分享您将面临的另一个问题。一些供应商在终止 bg 进程时实现了非常激进的政策,因此它们的电池生命周期会更长。比如小米。

最后一个提示,无关紧要,但我们花了一段时间才弄清楚,所以我要分享它。如果用户强制从设置中停止您的应用程序,您的应用程序将(即“停止状态”),直到用户主动再次启动它,它甚至不会收到 Firebase 推送消息。 p>

关于java - 建议我一些在 Android oreo 中保持 socket-io 连接的良好做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48899233/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com