albertokrt
07/12/14, 19:15:29
Hola a todos y gracias de antemano a todos aquellos que puedan ayudarme a resolver mis dudas. Llevo muy poco tiempo desarrollando (o intentandolo) aplicaciones en android y estos días probando diferentes cosas me he encontrado con el siguiente problema:
He creado una activity que simplemente al pulsar un botón lanza un service el cual por medio de geolocalización me proporciona las coordenadas de latitud y longitud para almacenarlas en una base de datos. En principio todo funciona correctamente. Arranca la activity y al pulsar el botón para lanzar el servicio aparece en la barra de notificaciones el icono de uso del GPS, el servicio captura las coordenadas y se guardan en una base de datos. Si salgo de la activity y compruebo en mi dispositivo las aplicaciones que estan en ejecución puedo ver que mi aplicación está ejecutando un proceso y un servicio.
El problema surge al ejecutar una aplicación para liberar memoria tipo "Clean Master", en ese momento el icono de GPS de la barra de notificaciones desaparece y el servicio deja de capturar coordenadas, como es normal. Al dirigirme nuevamente a las aplicaciones en ejecución de mi dispositivo veo que mi aplicación ahora está ejecutando cero procesos y un servicio. La pregunta es obvia, ¿Que puedo hacer para evitar esto?.
este es el código que utilizo:
Servicio:
public class mServicio extends Service {
private LocationManager mLocManager;
private LocationListener mLocListener;
public mServicio() {
Log.v("krt", "mServicio-> Constructor");
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.v("krt", "mServicio-> onCreate");
mLocManager= (LocationManager)getSystemService(LOCATION_SERVICE );
mLocListener= new LocationListener() {
@Override
public void onLocationChanged(Location location) {
//Obtengo las coordenadas y las almaceno en la bd
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
mLocManager.requestLocationUpdates(LocationManager .GPS_PROVIDER, 10000, 0, mLocListener, Looper.getMainLooper());
}
@Override
public void onDestroy() {
super.onDestroy();
Log.v("krt", "mServicio-> onDestroy");
mLocManager.removeUpdates(mLocListener);
}
}
Actividad Principal:
public class MainAct extends Activity {
private Intent mServicio;
private Button btnIniciarServicio;
public MainAct() {
Log.v("krt", "MainAct-> Constructor");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("krt", "MainAct-> onCreate");
setContentView(R.layout.main);
IniciarVariables();
}
@Override
protected void onStart() {
super.onStart();
Log.v("krt", "MainAct-> onStart");
}
@Override
protected void onRestart() {
super.onRestart();
Log.v("krt", "MainAct-> onReStart");
}
@Override
protected void onResume() {
super.onResume();
Log.v("krt", "MainAct-> onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.v("krt", "MainAct-> onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.v("krt", "MainAct-> onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v("krt", "mainAct-> OnDestroy");
}
public void IniciarVariables(){
btnIniciarServicio= (Button) findViewById(R.id.btnIniciarServicio);
btnIniciarServicio.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mServicio= new Intent (getApplicationContext(), mServicio.class);
startService(mServicio);
}
});
}
}
Pd: También he intentado ejecutar el servicio en un hilo aparte con idénticos resultados.
He creado una activity que simplemente al pulsar un botón lanza un service el cual por medio de geolocalización me proporciona las coordenadas de latitud y longitud para almacenarlas en una base de datos. En principio todo funciona correctamente. Arranca la activity y al pulsar el botón para lanzar el servicio aparece en la barra de notificaciones el icono de uso del GPS, el servicio captura las coordenadas y se guardan en una base de datos. Si salgo de la activity y compruebo en mi dispositivo las aplicaciones que estan en ejecución puedo ver que mi aplicación está ejecutando un proceso y un servicio.
El problema surge al ejecutar una aplicación para liberar memoria tipo "Clean Master", en ese momento el icono de GPS de la barra de notificaciones desaparece y el servicio deja de capturar coordenadas, como es normal. Al dirigirme nuevamente a las aplicaciones en ejecución de mi dispositivo veo que mi aplicación ahora está ejecutando cero procesos y un servicio. La pregunta es obvia, ¿Que puedo hacer para evitar esto?.
este es el código que utilizo:
Servicio:
public class mServicio extends Service {
private LocationManager mLocManager;
private LocationListener mLocListener;
public mServicio() {
Log.v("krt", "mServicio-> Constructor");
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.v("krt", "mServicio-> onCreate");
mLocManager= (LocationManager)getSystemService(LOCATION_SERVICE );
mLocListener= new LocationListener() {
@Override
public void onLocationChanged(Location location) {
//Obtengo las coordenadas y las almaceno en la bd
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
mLocManager.requestLocationUpdates(LocationManager .GPS_PROVIDER, 10000, 0, mLocListener, Looper.getMainLooper());
}
@Override
public void onDestroy() {
super.onDestroy();
Log.v("krt", "mServicio-> onDestroy");
mLocManager.removeUpdates(mLocListener);
}
}
Actividad Principal:
public class MainAct extends Activity {
private Intent mServicio;
private Button btnIniciarServicio;
public MainAct() {
Log.v("krt", "MainAct-> Constructor");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("krt", "MainAct-> onCreate");
setContentView(R.layout.main);
IniciarVariables();
}
@Override
protected void onStart() {
super.onStart();
Log.v("krt", "MainAct-> onStart");
}
@Override
protected void onRestart() {
super.onRestart();
Log.v("krt", "MainAct-> onReStart");
}
@Override
protected void onResume() {
super.onResume();
Log.v("krt", "MainAct-> onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.v("krt", "MainAct-> onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.v("krt", "MainAct-> onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v("krt", "mainAct-> OnDestroy");
}
public void IniciarVariables(){
btnIniciarServicio= (Button) findViewById(R.id.btnIniciarServicio);
btnIniciarServicio.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mServicio= new Intent (getApplicationContext(), mServicio.class);
startService(mServicio);
}
});
}
}
Pd: También he intentado ejecutar el servicio en un hilo aparte con idénticos resultados.