¿Por qué mi trabajo no está comenzando?

Intento usar JobSchedulers para mi aplicación de chat (para el post de envío asíncrono):

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) 

Y agrega mi service en manifiesto:

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

Escribo este JobService y no se llama onCreate () y no se llama 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() } } 

¡Pero mi onStartJob no llama! ¿Dónde está mi error? Algo que veo post "Los services de Google Play se han detenido".

Su statement manifiesta es incorrecta: debe declarar que los services de trabajo requieren un permiso específico que solo el sistema operativo puede usar. De la documentation JobService :

Los services de trabajo deben estar protegidos con este permiso:

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

Si se declara un service de trabajo en el manifiesto pero no está protegido con este permiso, el SO ignorará ese service.

Debo poner en set con

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

pero no

 bundle.putParcelable("TAG", object)