estoy corriendo un servicio en segundo plano que lee localización GPS/red y necesita hacer lo siguiente:Servicio Android y repetitiva tarea se ejecuta en las discusiones
ejecución en segundo plano y sin interrupciones en el reinicio de aplicaciones y mantenerlo viva tanto como sea posible sin que se mató (Esto se soluciona con la ayuda de comentario abajo de Merlin)
en una nueva ubicación recibido, llamar a un servicio web y enviar la ubicación de lectura
tienen una repeti tarea activa cada 60 segundos y reenviar la última ubicación al servicio web. Esto ayudará en caso de que el usuario permanezca en la misma posición.
Hay algunas cosas que he considerado y no estoy seguro de haber entendido bien. El servicio se ejecuta en el mismo hilo que la aplicación principal, por lo que enviar la ubicación al servidor en el mismo subproceso que el subproceso de la interfaz de usuario puede desencadenar bloqueos de UI y esto no es bueno. Además, no estoy seguro si los oyentes de GPS/Red tienen sus propios hilos o usan el mismo hilo que la aplicación.
Aquí es un código acortada del servicio para hacer las cosas más claras:
public class GPSLoggerService extends Service {
@Override
public void onCreate() {
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 50, locationListenerNetwork);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 50, locationListenerGps);
scheduleTaskExecutor = Executors.newScheduledThreadPool(5);
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
updateLocation(lastLocation);
}, 60, 60, TimeUnit.SECONDS);
return START_STICKY;
}
LocationListener locationListenerGps = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
updateLocation(location);
}
...
}
LocationListener locationListenerNetwork = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
updateLocation(location);
}
...
}
private void updateLocation(Location readLocation) {
//web service call
String response = WebServiceCalls.updateLocation(readLocation);
//log data in a local Sqlite database
saveLocation(readLocation)
}
Mi principal preocupación es cómo manejar la llamada UpdateLocation y tenerlo en un hilo separado del hilo principal aplicación. The scheduleTaskExecutor Creo que no es el camino a seguir. A veces, incluso después de llamar a stopService(), el servicio permanece activo, incluso si le digo a TaskExecutor que se apague. No puedo encontrar otra explicación por la cual el servicio no se detenga. Recapitulando: necesito enviar la ubicación cada vez que los oyentes reciben una nueva ubicación y volver a enviarla cada 60 segundos. También necesito poder detener el servicio rápidamente con la cancelación de hilos activos.
¿Cómo me recomendaría para manejar mi caso?
Qué se necesita para iniciarlo pegajosa? – Merlin