servicios - mantener aplicacion siempre abierta android studio
Custom JobIntentService onHandleWork no llamado (6)
Esto es lo que funcionó para mí,
Elimine la anulación de IBind
como lo sugiere @agirardello
y agregó lo siguiente
@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
No tengo idea de por qué esto funcionó.
Recientemente estuve actualizando una aplicación en la que trabajo para manejar las notificaciones de envío usando un JobIntentService en lugar de un IntentService regular porque parece ser la forma correcta de manejar esto en dispositivos pre-lollipop, así como en publicaciones. Estoy encolando el trabajo como tal:
enqueueWork(context, MyJobServiceExtension.class, JOB_ID, work);
Esta es la declaración manifiesta:
<service android:name="com.example.MyJobServiceExtension" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="true" tools:node="replace">
Nunca veo ninguna devolución de llamada en onHandleWork ni ningún registro de errores en mi logcat. ¿Alguien ha integrado con éxito esto que podría ayudar?
Actualización: probé esto en un dispositivo api nivel 21 y funcionó ... pero no parece que lo llamen en mi dispositivo android O pixel XL ... ¿Alguna pista de por qué?
Actualización # 2: También parece que estoy viendo que se está llamando onCreate del intentservice, pero ninguno de los otros métodos del ciclo de vida (incluido onHandleWork). ¿Alguien ha encontrado esto tampoco?
Me encontré con este problema tratando de poner en cola el JobIntentService
usando JobScheduler
. Mientras que JobScheduler
tiene su propio método enqueueWork (), no funciona con JobIntentService
. El servicio se iniciará pero nunca se llama a onHandleWork ().
Comenzó a funcionar de nuevo cuando usé el método estático enqueueWork () que está en el JobIntentService, por ejemplo:
MyJobIntentService.enqueueWork(context, ...)
Nada de esto era obvio al leer el javadoc de Android.
Para mí aún estaba iniciando el servicio después de enqueueWork y me estaba dando un error por eso.
Si ha anulado el método onCreate
en su JobIntentService
, JobIntentService
que se llame al onHandleWork.
JobIntentService
mi Service
a JobIntentService
y solo después de eliminar el método onCreate
funcionó.
Tuve el mismo problema (funcionó bien en un dispositivo pre-O, no hay indicios de que ocurra algo en un dispositivo O). Hoy, lo intenté de nuevo con exactamente el mismo código que ayer, ahora funciona, solo que la diferencia es que reinicié el dispositivo mientras tanto.
Mi teoría actual es que mi configuración inicial no funcionó; Mi actual lo hace y, simplemente, volver a implementar el nuevo código no borra el estado roto del JobScheduler; un reinicio o una desinstalación / reinstalación del paquete sí lo hace.
La configuración que está funcionando ahora (migrada de un antiguo IntentService):
<service
android:name=".MyJobIntentService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE"/>
y empezar con
Intent intent = new Intent();
intent.putExtra(EXTRA_NAME, extraValue);
JobIntentService.enqueueWork(context, MyJobIntentService.class, FIXED_JOB_ID, intent);
Tenga en cuenta que la intención no es una intención explícita (es decir, el ComponentName no está establecido).
Tuve el mismo problema después de actualizar IntentService a JobIntentService. Asegúrate de eliminar este método de tu implementación anterior:
@Override
public IBinder onBind(Intent intent) {
return null;
}
Para mí, esto resolvió el problema y ahora funciona tanto antes como después de Oreo.