1
我遇到了一些麻煩,試圖阻止我之前在Android應用程序類的擴展類的onCreate()上開始的服務。 GPS應該在應用程序執行期間運行(該部分工作正常),但是當應用程序關閉時,服務仍在運行。我嘗試使用onTerminate(),因爲applicationaction類中不存在onClose(),並且服務繼續運行。停止擴展應用程序類的Android服務
public class ControlEntrega extends Application {
public GPSBean posicion;
public ServicioGPS servicio;
public void onCreate() {
Log.d(TAG,"onCreate");
super.onCreate();
usuario=null;
cliente=null;
entrega=null;
dal=new DAL(getApplicationContext());
crearDB();
util=new Utilitario();
servicio=new ServicioGPS();
posicion=new GPSBean();
iniciarGPS();
}
@Override
public void onTerminate() {
super.onTerminate();
Log.d(TAG,"onTerminate");
try {
stopService(new Intent(this,ServicioGPS.class));
} catch (Exception e) {
Log.d(TAG,"onTerminate error: "+e.getMessage());
}
}
}
服務類:
公共類ServicioGPS擴展服務實現LocationListener的{
String TAG=ServicioGPS.class.getCanonicalName();
LocationManager locationManager=null;
public int tiempoGPS=1;
public int distanciaMetros=10;
Intent notificacion;
ControlEntrega controlador;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG,"onDestroy");
locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
locationManager.removeUpdates(this);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand");
controlador= (ControlEntrega)getApplicationContext();
if(controlador!=null){
if(controlador.posicion!=null){
controlador.posicion.imprimir();
}
}
locationManager =(LocationManager)getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria,true);
//LocationManager.GPS_PROVIDER
//LocationManager.NETWORK_PROVIDER
locationManager.requestLocationUpdates(provider,1000 * 60 * tiempoGPS,distanciaMetros,this);
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onLocationChanged(Location location) {
Log.d(TAG, "onLocationChanged");
//Seteando los valores del objeto location
if(controlador!=null){
Log.d(TAG, "seteando bean GPS");
controlador.posicion=new GPSBean();
controlador.posicion.latitud=location.getLatitude();
controlador.posicion.longitud=location.getLongitude();
controlador.posicion.altitud=location.getAltitude();
controlador.posicion.precision=location.getAccuracy();
controlador.posicion.proveedor=location.getProvider();
controlador.posicion.tiempo=location.getTime();
controlador.posicion.velocidad=location.getSpeed();
controlador.posicion.imprimir();
}
//Notificación
Intent notificacion = new Intent(getString(R.string.intentGPS));
sendBroadcast(notificacion);
//Se para asi mismo, ya se calendarizo antes
stopSelf();
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
有一種方法在應用程序完全停止我能知道嗎?所以我可以停止服務。
問候
阿爾弗雷多
在不同的過程比你用來啓動服務的應用程序運行你的服務。請檢查ServicioGPS的清單聲明。 – prabhat
您的終端是否被稱爲?實際上,爲了安全起見,你應該改變onPause()方法,因爲在調用onPause()之後你的進程可能被操作系統殺死。這意味着onStop()和onDestroy()可能會或可能不會被調用。 在任何情況下,都不能保證會調用onDestroy()。如果操作系統決定殺死你的進程,它不會在任何活動上調用onDestroy()。 – Skynet
關於「是否知道我是否完全停止」您需要編寫一個文件並在每個活動生命週期方法中更新此文件,那麼您必須跟蹤此文件。 – Skynet