Servicio de Android que se reinicia cuando se cancela la aplicación
Soy nuevo en android. Estoy desarrollando una aplicación que registra los datos del sensor. Tengo una actividad con dos botones. Cuando el usuario presiona el botón de inicio, quiero iniciar un servicio y registrar los datos del sensor hasta que el usuario presione el botón de parada. No estoy seguro de qué tipo de servicio quiero usar. He leído acerca de locales vs servicios remotos, pero no realmente entender la diferencia.
Lo que he intentado hasta ahora:
- Cliente de servicio WSDL / SOAP de Android
- ¿Por qué no funciona mi servicio en Android? (Sólo quiero registrar algo nunca 5 segundos)
- Hilos de aplicación vs Hilos de servicio
- Comprobación de la conexión a Internet con el servicio en android
- ¿Necesita ayuda para descargar imágenes de fondo en Android?
Creé una actividad con dos botones que inician y detienen un servicio local:
//Start Service startService(new Intent(this, MyService.class)); //Stop Service stopService(new Intent(this, MyService.class));
También creé un servicio pegajoso que onStartCommand()
comienza a registrar datos del sensor:
public int onStartCommand(Intent intent, int flags, int startId) { mSensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_FASTEST); mSensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_UI); mSensorManager.registerListener(this, lightSensor, SensorManager.SENSOR_DELAY_UI); Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); return Service.START_STICKY; }
AndroidManifest.xml:
<service android:name=".MyService" android:enabled="true" android:process=":HelloSensors_background"/>
Funciona bien, sin embargo el problema es que cuando mato la aplicación que inició el servicio, este servicio se reinicia y pierde todos los datos previamente registrados. ¿Qué debo utilizar para tener un servicio que se ejecute sin problemas y seguir funcionando incluso cuando la aplicación se mata para no perder los datos registrados, por favor?
- Enviar datos de Servicio a mi actividad
- ServiceConnection :: onServiceConnected no se llama aunque Context :: bindService devuelve true?
- Servicio eficiente de fondo para el seguimiento de la ubicación del usuario
- ¿Cómo mantener una conexión TCP establecida indefinidamente?
- Iniciar el servicio en el inicio y después de que se haya instalado la aplicación
- Mantenga el servicio en funcionamiento incluso si el teléfono está apagado
- La notificación sigue en la barra después de matar al servicio
- servicio androide para realizar un seguimiento de las llamadas salientes y SMS en segundo plano
Después de su aclaración sobre el asesinato:
Es probable que desee ejecutar su Service
en un proceso diferente al de su Application
, que puede conseguir mediante una declaración en su manifiesto:
<service android:name=".ServiceClassName" android:process=":yourappname_background" > ...
Utilice el mismo atributo android:process
para cualquier declaración de receiver
en su manifiesto.
Si sólo desea recibir eventos que se pueden declarar en el manifiesto, puede considerar el uso de un IntentService
, que casi nunca será visible para el usuario debido a su corto tiempo de actividad. Sin embargo, si necesita escuchar eventos que sólo se pueden recibir cuando registra los receptores de forma programática (en cuyo caso, obviamente, la cláusula de receiver
en el manifiesto no tiene sentido), entonces no puede hacer nada contra un usuario (o uno de los " Asesinos de aplicaciones inteligentes ") que matan a su servicio. La ventaja, aún, sería que los usuarios esperan entender que su aplicación se puede matar, mientras que su Service
no puede (si quieren que haga algo).
Además, puede poner su Service
en primer plano .
Creo que tienes que declarar el servicio en el AndroidManifest.xml.
- Intención de correo electrónico de Android y cuerpo del mensaje
- ¿Cómo enviar datos a la impresora bluetooth va aplicación android?