【问题标题】:JobScheduler behaviour on Android OAndroid O 上的 JobScheduler 行为
【发布时间】:2017-05-29 20:49:05
【问题描述】:

According to the documentation,从 Android O 开始,服务将在应用不再处于前台几分钟后停止。

文档建议大多数服务可以替换为 JobScheduler 作业。我的问题是 - 作业是否也有任何特殊行为,或者它们的行为是否与 Android O 之前的服务相同?他们可以“永远”活着(当然,只要系统不需要内存),还是系统也会在某个窗口结束时杀死他们?

【问题讨论】:

    标签: android android-8.0-oreo


    【解决方案1】:

    他们可以“永远”活着(当然,只要系统不需要内存),还是系统也会在某个窗口结束时杀死他们?

    没有。在我的测试中,您有大约 10 分钟的时间,而常规服务大约需要 1 分钟。

    如果您需要永久运行的服务,则需要将其设为前台服务(startForegroundService() 在 Android O+ 上,或startService() 加上 startForeground() 在 Android 7.1 及更早版本上)。

    【讨论】:

    • 这 10 分钟内我的应用程序的状态是什么?据我了解,有 3 种状态 - 前景,然后是 1 分钟的“窗口”,然后是空闲状态。如果我安排作业在应用空闲后启动,应用的状态是否与“窗口”相同?
    • 我注意到您也可以使用 JobScheduler 启动后台服务,而不会收到 IllegalStateException,这很好。
    • @DataDino:这很有趣。我猜想在工作未完成时受核心操作系统的约束就足以让您启动服务。它适合文档,但我没有考虑过。谢谢!
    • @CommonsWare,它在官方文档中:“在大多数情况下,应用程序可以通过使用 JobScheduler 作业来解决这些限制”:developer.android.com/preview/features/background.html :)
    • @DataDino:不过,我对此的解释是在工作中完成工作,而不是从工作中启动服务。 IOW,JobService 是完成工作的地方,而不是在 JobService 启动的某些辅助服务中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多