英文:
JobIntentService not call OnHandleWork
问题
我有自定义的JobIntentService,带有静态方法enqueueWork。
public static void enqueueWork(@NonNull Context context, @NonNull Intent intent) {
enqueueWork(context, MyJobIntentService.class, JOB_ID, intent);
}
此外,我还有自定义的FirebaseMessagingService实现。当我从FCM收到推送通知时,我调用了我的JobIntentService的enqueueWork方法。
MyJobIntentService.enqueueWork(context, new Intent());
但是OnHandleWork方法在Android 8.0及更高版本上不会被调用。
我的manifest.xml文件。
<service android:name="com.company.MyJobIntentService"
android:permission="android.permission.BIND_JOB_SERVICE" />
你有任何关于为什么它无法正常工作的想法吗?谢谢。
英文:
I've custom JobIntentService witn static method enqueueWork.
public static void enqueueWork(@NonNull Context context, @NonNull Intent intent) {
enqueueWork(context, MyJobIntentService.class, JOB_ID, intent);
}
Also I've custom implementation of the FirebaseMessagingService. When I receive the push notification from FCM, I call the enqueueWork of my JobIntentService.
MyJobIntentService.enqueueWork(context, new Intent());
But method OnHandleWork not called on Android 8.0 and higher.
My manifest.xml.
<service android:name="com.company.MyJobIntentService"
android:permission="android.permission.BIND_JOB_SERVICE" />
Do you have any ideas why it work not correctly? Thank you.
答案1
得分: 1
没有错误。不幸的是,JobIntentService 在 Android 8.0 及更高版本上不会立即运行。
在作为 O 之前的服务运行时,将工作加入队列的操作通常会立即启动服务,而不管设备是否正在休眠或处于其他状态。当作为 Job 运行时,它将受到标准的 JobScheduler 策略的限制,对于设置了 setOverrideDeadline(long) 为 0 的 Job:在设备休眠时不会运行该作业,如果设备在内存压力较大且有大量需要运行的作业的情况下,它可能会比服务延迟更长时间。
在测试时,我创建了一个空项目,在调用时立即运行,但当我在一个真实的复杂项目中使用时,它会在调用后几分钟后运行。
英文:
Nothing incorrectly. Unfortunately, JobIntentService will not run immediately on Android 8.0 and higher.
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.
When testing,I new a empty project, it runs immediately when call, but when i use in a real complex project,it runs several minutes later after called.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论