为什么我的工作没有开始?

我尝试使用JobSchedulers为我的聊天应用程序(用于异步发送消息):

val job = dispatcher.newJobBuilder() .setService(BackgroundJobService::class.java) .setTag(BackgroundJobService.TASKTAG_SEND_MESSAGE) .setReplaceCurrent(false) .setConstraints(Constraint.ON_ANY_NETWORK) .setExtras(bundle) .setTrigger(Trigger.executionWindow(0, 1)) .build() dispatcher.mustSchedule(job) 

并在清单中添加我的服务:

 <service android:exported="false" android:name=".data.background.service.BackgroundJobService"> <intent-filter> <action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/> </intent-filter> </service> 

我写这个JobService,它不调用onCreate(),并没有调用onDestroy()

 class BackgroundJobService : JobService() { companion object { val TASKTAG_SEND_MESSAGE = "send_message" } @Inject lateinit var webSocket: IRxWebSocket var subscribe: Disposable? = null override fun onCreate() { super.onCreate() App.appComponent.inject(this) subscribe = webSocket.connect().subscribe({}, {}) } override fun onStartJob(job: JobParameters?): Boolean { return true // Debug point here } override fun onStopJob(job: JobParameters?): Boolean { return true } override fun onDestroy() { super.onDestroy() subscribe?.dispose() } } 

但我的onStartJob不能打电话! 我的错误在哪里? 我看到消息“Google Play服务已停止”。

您的清单声明是错误的:您需要将作业服务声明为仅需要操作系统本身可以使用的特定权限。 从JobService文档 :

作业服务必须受到以下权限的保护:

<service android:name="MyJobService" android:permission="android.permission.BIND_JOB_SERVICE" >

如果在清单中声明了一个作业服务,但没有使用此权限保护,则该服务将被操作系统忽略。

我必须捆绑在一起

 bundle.putString("TAG", gson.toJson(object)) 

但不是

 bundle.putParcelable("TAG", object)