在将应用转换为适用于Android Oreo的应用时,我会在JobIntentService
over here上阅读文档。
在那里,我发现(重要部分强调):
作为pre-O服务运行时,正常的服务执行 语义适用:[...]作为Job运行时,典型的JobService 将应用执行时间限制,之后将停止作业 (干净利落,不是通过杀死进程)并重新安排继续进行 稍后执行。
如果我查看documented limitations,就没有关于任何执行时间限制的消息。 JobScheduler
也not mention anything。
答案 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;
}