JobIntentService onHandleWork没有被调用

时间:2018-12-13 03:45:05

标签: java android jobintentservice

我有JobIntentService的骨架类

public class BackgroundRequestService extends JobIntentService {
/**
 * Unique job ID for this service.
 */
static final int JOB_ID = 1234;

public static void enqueueWork(Context context, Intent work) {
    BackgroundRequestService.enqueueWork(context, BackgroundRequestService.class, JOB_ID, work);
}


@Override
protected void onHandleWork(@NonNull Intent intent) {

    if (intent.getExtras() != null){
        String x = ";";
    }
}

}

我已将服务包含在清单中

 <service android:name=".BackgroundRequestService"
        android:enabled="true"
        android:permission="android.permission.BIND_JOB_SERVICE"
        android:exported="false" />

并调用适当的入队方法

Intent intent = new Intent();
        intent.putExtra("hardware", hardware);
        BackgroundRequestService.enqueueWork(context, intent);

但是onHandleWork永远不会被调用。我查看了所有有关正确设置服务并确保onBind未被覆盖的页面,但这仍然无法正常工作,想知道是否另一双眼睛会发现我遗漏的东西。谢谢

2 个答案:

答案 0 :(得分:0)

尝试以这种方式启动服务:

 ComponentName comp = new ComponentName(context.getPackageName(), BackgroundRequestService.class.getName());
 BackgroundRequestService.enqueueWork(context, (getIntent().setComponent(comp)));

答案 1 :(得分:0)

通过对Logcat的适当了解发现了问题

找出我放入Intent中的“硬件”缺少要序列化的字段。

这导致此消息出现在Logcat中

I/UDP: no longer listening for UDP broadcasts cause of error Parcelable encountered IOException writing serializable object (name = Project.Hardware)

解决此序列化问题后,我可以调用onHandleWork()方法。