0

我有一个 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 未被覆盖的所有页面,但这仍然不起作用,想知道另一组眼睛是否会发现我错过的东西。谢谢

4

2 回答 2

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() 方法。

于 2018-12-13T04:00:28.370 回答
0

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

 ComponentName comp = new ComponentName(context.getPackageName(), BackgroundRequestService.class.getName());
 BackgroundRequestService.enqueueWork(context, (getIntent().setComponent(comp)));
于 2018-12-13T03:55:17.373 回答