【问题标题】:Background Service Limitations Android and voip app后台服务限制 Android 和 voip 应用程序
【发布时间】:2017-12-07 23:10:22
【问题描述】:

我正在开发 voip 应用程序。我做了关于后台服务信号的所有逻辑。当用户存在应用程序时,我将停止服务。在这种情况下,我没有连接到服务器。当我处于这种状态时,服务器正在发送推送通知 (FCM),我正在启动服务并为来电或消息创建通知。到目前为止一切都很好:)

我已经阅读了 Oreo 对后台服务的限制,并意识到现在我需要在显示通知的同时在前台启动服务。然后我想检查环聊(谷歌)是如何做到的,当然当收到消息时他们正在后台运行服务。我错过了什么吗?

谢谢

【问题讨论】:

    标签: android service voip android-8.0-oreo


    【解决方案1】:

    可见活动 = 前景

    当用户存在应用程序时,我将停止服务

    如果这意味着该服务仅在您的应用对用户可见时才运行,那么该进程和该服务实际上是在前台,并且您不应该遇到系统终止您的服务的任何问题:

    如果满足以下任一条件,则认为应用处于前台:

    • 它有一个可见的活动,无论活动是启动还是暂停。

    收到的 FCM = 前台

    另外,接收高优先级 FCM 消息会将您的应用置于临时白名单以进行后台处理,届时您将有足够的时间进行处理,或者您可以随时在收到 FCM 后启动前台服务- 就像一个处理呼叫的服务,在运行时应该显示一个通知:

    在某些情况下,后台应用会被置于临时白名单中几分钟。当应用在白名单中时,它可以不受限制地启动服务,并且允许其后台服务运行。应用在处理用户可见的任务时会被列入白名单,例如:

    • 处理高优先级 Firebase 云消息传递 (FCM) 消息。

    您的应用设计 - 通过接收优先级 FCM 来处理来电,然后创建前台呼叫服务 - 似乎是合理的。

    请参阅documentation,这对这些主题非常清楚。

    【讨论】:

    • 是的,我已经计划在前台启动它,但我想知道如果没有它,环聊或 Viber 是如何做到的。特别是如果文档说明: 系统创建服务后,应用程序有五秒钟的时间调用服务的 startForeground() 方法来显示新服务的用户可见通知。如果应用程序在时间限制内没有调用 startForeground(),系统会停止服务并声明应用程序为 ANR。 当然我想他们已经将构建目标设置为 26:)
    • 您的意思是,这些应用程序在通话期间不显示前台通知?另外,关闭应用程序是否会“杀死”通话? (我既不使用 viber 也不使用环聊)
    • 我说的是来电的消息和通知(不是新东西)。例如环聊的场景:当环聊未运行并且您收到消息时。显示通知。当您转到开发者选项 -> 运行服务时,您会看到环聊正在运行服务(不是在前台模式下)...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    相关资源
    最近更新 更多