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:

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?

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.

  • Servicio de Android
  • El servicio de Android se detiene al salir de la aplicación
  • Android Service se está ejecutando, pero no aparece en la configuración -> servicios en ejecución
  • Opcionalmente, iniciar actividades y utilizar notificaciones de servicios en Android. Sólo lanzar o notificar si una determinada aplicación está presente
  • Cómo grabar vídeo desde el fondo de la aplicación: Android
  • Android: Transmisión de datos entre servicio y actividad
  • ¿Cómo mantener una aplicación Android funcionando indefinidamente?
  • ¿Qué significa la pérdida de una conexión de servicio?
  • Android - ¿Utilizando el método de un servicio en una actividad?
  • Ice Cream Sandwich init.rc documentación
  • Paradas de servicio de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.