Android Start_redeliver_intent tarda mucho tiempo (horas) en reiniciar el servicio
Actualmente estoy realizando una aplicación que realiza sondeos de datos GPS y carga en un servidor. El servicio se inicia cuando la aplicación está en primer plano y sigue funcionando cuando la aplicación entra en segundo plano. Cuando se ejecuta la aplicación cerca, onTaskRemoved se llama y un administrador de alarmas reinicia el servicio. El servicio es un IntentService con un AsyncTask para publicar las coordenadas de gps.
Aquí es donde ocurre la rareza. Cuanto más larga sea la aplicación en primer plano, más tiempo tardará Android en reiniciarla utilizando START_REDELIVER_INTENT como la devolución en onStartCommand. El servicio es muy rara vez asesinado por Android, pero cuando lo hace, puede tomar mucho tiempo para reiniciar en función de cuánto tiempo estaba en primer plano. (?) .. creo.
- Transmitir datos a onDestroy () de Service
- ¿Cómo comprobar si una actividad se está ejecutando en segundo plano / primer plano de un servicio?
- ¿Qué hace setAction () para intención (Broadcast)
- ¿Cómo hacer que el daemon nativo de Unix / Linux funcione en Android?
- Retraso en el lanzamiento de la actividad del servicio de chat principal
Así que para propósitos de pruebas, he eliminado el administrador de alarmas que reinicia la aplicación, así que cuando deslizo la aplicación cerrada, android se reiniciará con START_REDELIVER_INTENT. Si tengo la aplicación abierta durante 30 segundos, lo que significa que el servicio en segundo plano se está ejecutando durante 30 segundos, y luego deslizar la aplicación cerrada, Android se reiniciará en menos de un minuto.
Pero si empiezo la aplicación, que inicia el servicio en segundo plano, y dejo la aplicación en primer plano para decir 10 minutos, puede tardar más de una hora en Android para reiniciar el servicio cuando deslizo la aplicación cerrada. Durante estos 10 minutos, la aplicación está sondeando gps cada 30 segundos, y usando un AsyncTask para subir coords cada 5 minutos. No tengo ni idea de lo que está pasando. Ni siquiera estoy totalmente seguro de que está relacionado con la aplicación que está en primer plano, pero puedo replicar una y otra vez por tiempo cuánto mantener la aplicación en primer plano, que parece proporcional a cuánto tiempo lleva Android para reiniciar el servicio.
Hombre sé que esto suena loco, pero espero que no lo sea.
También como una nota lateral, estoy usando Cordova / javascript para la aplicación en sí, pero el servicio es todo Java. Aquí está mi onCreate y onStartCommand. No estoy seguro de qué más debo publicar.
@Override public void onCreate() { super.onCreate(); //Log.i(TAG, "OnCreate"); locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 0, this); registerReceiver(sendHTMLReceiver, new IntentFilter("html_alarm")); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if (intent != null) { isCheckedIn = intent.getExtras().getBoolean("checkedIn"); showNotification("Courtesy Checkout Enabled"); } return START_REDELIVER_INTENT; }
- Servicio y cordova plugin
- Android - Uso de Google Analytics v4 Campaign Measurement
- StartForeground causando problemas con cordova
- Cómo hacer que el servicio Android se comunique con la actividad
- Cómo obtener la intención que detiene el servicio en android
- Simular Android matando y reiniciar el servicio
- Google Analytics V4 Medición de la campaña Las pruebas no funcionan
- Cómo detectar el botón de volumen haga clic en el servicio de fondo o en el entorno nativo en Android?