【问题标题】:handle socket connection in background service for api 28在 api 28 的后台服务中处理套接字连接
【发布时间】:2023-03-03 10:48:01
【问题描述】:

在 api 28 之前,我可以简单地启动后台服务并持续监听套接字连接以获取任何传入数据 然而,在最近的 api 28 变化中,如下所示https://developer.android.com/about/versions/oreo/background#services 我无法再在 android 9 中启动后台服务,除非它仅涵盖以下情况之一

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

处理高优先级 Firebase 云消息传递 (FCM) 消息。
接收广播,例如 SMS/MMS 消息。 从通知执行 PendingIntent。 在 VPN 应用程序将自身提升为 前景。

我发现的唯一选择是将服务作为前台启动。 我已经找到了一些替代方法,例如使用 JobScheduler 或 WorkManger,但我认为它们不能满足我的要求

所以我的问题是除了使用前台服务之外,还有其他方法可以侦听针对 android 9 (api 28) 的套接字连接吗?

【问题讨论】:

  • 什么是最佳实践?只有一个选项,你已经知道那是什么
  • 你的意思是前台服务?

标签: android background-service


【解决方案1】:

好问题。我也因服务而幸存下来。对于 Android 9,前台服务也不是更好的解决方案。由于系统资源情况,前台服务也可以被杀死。

你最好使用WorkManager。它会给你一个很好的味道。

试一试。

【讨论】:

  • 我不确定,但我认为我不能将 workmanager 用于后台服务等长时间运行的任务
【解决方案2】:

我使用带有工作管理器的android前台服务。如果您担心服务关闭,请使用定期工作管理器检查服务的运行状态。例如每10分钟或1小时一次。因为工作管理器不兼容像套接字一样工作的逻辑,你可以定期做,也可以只做一次。

Soo
Socket listen every time
Work manager work by periodicly or one shot
Service works every time;

每次工作人员和每次监听器的最终结果都非常适合像 firebase 推送通知服务。

for a good working cycle
Service Continuously works and listens with a socket inside.
The work manager checks periodically whether the service is running, in case the service is closed.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    相关资源
    最近更新 更多