JobIntentService 不调用 OnHandleWork

Posted

技术标签:

【中文标题】JobIntentService 不调用 OnHandleWork【英文标题】:JobIntentService not call OnHandleWork 【发布时间】:2020-05-15 22:47:54 【问题描述】:

我已经自定义 JobIntentService 和静态方法 enqueueWork

public static void enqueueWork(@NonNull Context context, @NonNull Intent intent)         
            enqueueWork(context, MyJobIntentService.class, JOB_ID, intent);       
    

我还自定义了 FirebaseMessagingService。当我收到来自 FCM 的推送通知时,我会调用我的 JobIntentServiceenqueueWork

MyJobIntentService.enqueueWork(context, new Intent());

但方法 OnHandleWork android 8.0 及更高版本上未调用。 我的 manifest.xml.

<service android:name="com.company.MyJobIntentService"
            android:permission="android.permission.BIND_JOB_SERVICE" />

您知道为什么它不能正常工作吗?谢谢。

【问题讨论】:

【参考方案1】:

没有错。遗憾的是,JobIntentService 不会立即在 Android 8.0 及更高版本上运行。

When running as a pre-O service, the act of enqueueing work will generally start the service immediately, regardless of whether the device is dozing or in other conditions. When running as a Job, it will be subject to standard JobScheduler policies for a Job with a setOverrideDeadline(long) of 0: the job will not run while the device is dozing, it may get delayed more than a service if the device is under strong memory pressure with lots of demand to run jobs.

测试时,我新建一个空项目,调用时立即运行,但在真正复杂的项目中使用时,调用后几分钟后运行。

【讨论】:

以上是关于JobIntentService 不调用 OnHandleWork的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin:如何从 Fragment 调用 JobIntentService?

JobIntentService 的 onDestroy 被调用后会发生啥?

在 JobIntentService 中可以在没有 onHandleWork() 的情况下调用 onDestroy() 吗?

来自 JobIntentService 的吐司

如何从 JobIntentService 中删除重复的意图

我们如何在 Scala 中使用 android JobIntentService?