我有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未被覆盖的页面,但这仍然无法正常工作,想知道是否另一双眼睛会发现我遗漏的东西。谢谢
答案 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()方法。