¿Cómo mantengo con vida al hilo de un intentismo?
-
13-12-2019 - |
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!
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í.