Pregunta

Estoy escribiendo una aplicación de prueba que realiza un seguimiento de la ubicación de los usuarios.La idea es que pueda comenzar un servicio que luego se registra para las actualizaciones de ubicación.Por ahora estoy usando un intentservice para eso.

El código de servicio (que no está funcionando ...) se ve así:

public class GpsGatheringService extends IntentService {

// vars
private static final String TAG = "GpsGatheringService";
private boolean stopThread;

// constructors
public GpsGatheringService() {
    super("GpsGatheringServiceThread");
    stopThread = false;
}

// methods
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(TAG, "onStartCommand()");
    return super.onStartCommand(intent, flags, startId);
}

@Override
protected void onHandleIntent(Intent arg0) {
    // this is running in a dedicated thread
    Log.d(TAG, "onHandleIntent()");
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    LocationListener locationListener = new LocationListener() {

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            Log.d(TAG, "onStatusChanged()");
        }

        @Override
        public void onProviderEnabled(String provider) {
            Log.d(TAG, "onProviderEnabled()");
        }

        @Override
        public void onProviderDisabled(String provider) {
            Log.d(TAG, "onProviderDisabled()");
        }

        @Override
        public void onLocationChanged(Location location) {
            Log.d(TAG, "onLocationChanged()");
        }
    };
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

    while (!stopThread) {
        try {
            Log.d(TAG, "Going to sleep...");
            Thread.sleep(1500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.d(TAG, "onDestroy()");
    stopThread = true;
}

}

Actualmente, lo único que sucede es la salida de "ir a dormir ...".Necesito un poco de mecanismo que mantiene vivo el hilo (ya que el oyente ya no se puede alcanzar para las actualizaciones de estado) y no resiste la hora de la CPU (creo que el bucle ocupado no es la forma preferida). Incluso si hay toneladas de otras formas ¿Cómo realizar el comportamiento de la solicitud (coordinaciones de registro de GPS) Estoy interesado en una solución a esta manera de aprender una técnica para resolver problemas de esta naturaleza!

¿Fue útil?

Solución

¿Cómo mantengo vivo el hilo de un intentservice?

no lo haces.No usas IntentService en un escenario como este.

Necesito un poco de mecanismo que mantiene vivo el hilo (debido a que el oyente ya no se puede alcanzar para las actualizaciones de estado) y no desperdicia el tiempo de la CPU (creo que el bucle ocupado no es la forma preferida)

No, en este caso, un Service está bien, porque usted controla cuando el servicio se va, controla la vida útil de cualquier hilos que crea, etc. GeneracDicetArdoDode no es adecuado para su propósito previsto, porque es Controles Cuando el servicio se va, y , controla la vida útil de los hilos.

Otros consejos

Considere usar un servicio remoto .Funcionó para mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top