" JobService执行时间限制"在Android的JobIntentService文档中提到过?

时间:2018-02-05 20:05:15

标签: android service android-8.0-oreo

在将应用转换为适用于Android Oreo的应用时,我会在JobIntentService over here上阅读文档。

在那里,我发现(重要部分强调):

  

作为pre-O服务运行时,正常的服务执行   语义适用:[...]作为Job运行时,典型的JobService   将应用执行时间限制,之后将停止作业   (干净利落,不是通过杀死进程)并重新安排继续进行   稍后执行。

如果我查看documented limitations,就没有关于任何执行时间限制的消息。 JobSchedulernot mention anything

  • 这是一个我不应该担心的时间限制吗?
  • 没有证件吗?
  • 或者不是/不再存在执行时间限制?
  • 或者我是否必须重新设计我的服务,以便在任何给定的时间点可以中断和重新启动它们?最佳做法?

2 个答案:

答案 0 :(得分:6)

  

Android的JobIntentService文档中提到了“JobService执行时间限制”多长时间?

在实践中,似乎是10分钟。我最初通过测试确定了,但IIRC有人指出了源代码中的限制。

  

这是一个我不应该担心的时间限制吗?

如果您确信您的工作将在更短的时间内完成,是的,至少目前是这样。

  

它没有记录吗?

  

或者执行时间限制是否已不存在?

我最后一次测试时存在。

  

或者我是否必须重新设计我的服务,以便在任何给定的时间点可以中断和重新启动它们?

嗯,理想情况下,是的,特别是如果您使用超出时间的任何约束。例如,如果您说您的作业需要网络连接,并且设备失去连接,则您的作业将被停止。这可能会在10分钟的时间段过去之前发生。

  

最佳做法?

尽量避免定期开展背景工作。

答案 1 :(得分:0)

为了避免执行时间限制,我使用波纹管练习来解决我的问题。

@Override
    public void onDestroy() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && isStopped()) {
           //do nothing
        } else {
            super.onDestroy();
           //on destroy called
        }
    }

    @Override
    public boolean onStopCurrentWork() {
        return false;
    }