【问题标题】:Android migrate background service to jobschedulerAndroid将后台服务迁移到jobscheduler
【发布时间】:2018-06-03 21:31:42
【问题描述】:

我们有一个项目,它使用后台服务从服务器检索实时事件。我们使用 s websocket 连接来检索数据。但现在在 Android Oreo 或更高版本中,操作系统开始显示电池警告。

我担心的是,如果我们迁移到作业调度程序,它会在某个时间后停止。我们想在事件发生时显示通知

我尝试了作业调度程序,它提供了重复调用。但是我们的连接是实时的,所以如果作业调度程序停止,我们将无法获取数据。 那么其他应用程序如何处理这个(例如 WhatsApp)

保持连接和检索数据的最佳方式是什么?

提前感谢

【问题讨论】:

    标签: android android-service android-jobscheduler android-background


    【解决方案1】:

    我担心的是,如果我们迁移到 jobscheduler,它会在之后停止吗? 有时间。

    是的。在打盹模式下,所有计划的作业都会推迟到操作系统提供维护窗口。

    保持连接和检索数据的最佳方式是什么?

    您不应与服务器保持持久连接并永久运行后台服务。从 Android O 开始,您将无法在后台运行服务。操作系统将终止所有服务,任何在后台启动服务的尝试都将导致IllegalStateException

    您的要求似乎需要使用 FCM。基本思想是,让服务器通知应用程序有关数据可用性的信息,而不是不断地向服务器询问数据。更多细节和实现步骤,请参考official document

    【讨论】:

    • 是的.. 但我们不能使用 fcm。但是whatsapp之类的应用程序如何将其服务保持在后台?
    • @user332863 他们不会保持持续的连接。他们还依赖 FCM。但是,whatsapp 等应用程序有资格将自己列为白名单应用程序。您可以查看此document,其中描述了如何将您的应用列入白名单。
    • @user332863 你有没有从这个SO和这个SO检查我的答案
    • 所以在这种情况下我们必须依靠一些轮询机制对吗?因为如果我们使用 WS 连接,并且操作系统终止服务,我们可能会错过事件。如果我们使用作业调度器,我们可以多久调用一次轮询请求。(我们的用例仅在网络处于活动状态时才有效,因此我们可以利用 Jobschedulers 约束 api)
    • @user332863 JobScheduler 所需的最短时间约为 15 分钟,即您的作业每 15 分钟仅执行一次。打盹模式下的行为取决于操作系统,您无法控制它。您可以使用可以在特定时间触发的 AlarmManager
    猜你喜欢
    • 2019-07-30
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多