我的應用程序獲得了處理位置更新的後臺服務,該服務可以在特定的時間間隔進行處理。我試圖停止服務以不同的時間間隔啓動一個新服務,但最終發生的情況是應用程序以不同的時間間隔發送兩個位置更新。基本上,我的第一個服務在使用stopService()後不會停止。使用stopService後,GPS服務仍在運行()
下面是啓動服務的代碼:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_activity_f);
tiempoGPS = 25000;
startService(new Intent(getBaseContext(), ServicioDeFondo.class).putExtra("TiempoGPS", Integer.toString(tiempoGPS)));
}
這裏的一部分,我停下來點擊一個按鈕後:
private void selectItem(int position) {
...
if(menus[position].equals("Configuracion"))
{
try {
stopService(new Intent(getBaseContext(),ServicioDeFondo.class));
}
catch(Exception e)
{
...
}
}
}
這裏我的服務類onCreate方法:
@Override
public void onCreate()
{
mHandler = new Handler();
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
telefonoID = telephonyManager.getDeviceId();
telephonyManager = null;
createLocationRequest();
buildGoogleApiClient();
mGoogleApiClient.connect();
}
Onstart命令方法:
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
tiempoEntreActualizacion = Integer.parseInt((String) intent.getExtras().get("TiempoGPS"));
reportarGPS = new Thread(new Runnable() { public void run()
{
try
{
while(true)
{
try {
Thread.sleep(tiempoEntreActualizacion);
new APISendClass().execute();
} catch (InterruptedException e) {
e.printStackTrace();
mGoogleApiClient.disconnect();
Thread.currentThread().interrupt();
return;
}
}
}
catch (Exception e)
{
//TODO Auto-generated catch block
e.printStackTrace();
}
} });
reportarGPS.start();
return START_NOT_STICKY;
}
這裏是我的服務類的onDestroy方法:
@Override
public void onDestroy(){
reportarGPS.interrupt();
reportarGPS = null;
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, (com.google.android.gms.location.LocationListener) this);
mGoogleApiClient.disconnect();
mGoogleApiClient = null;
mHandler.removeCallbacksAndMessages(null);
Thread.currentThread().interrupt();
super.onDestroy();
}
最後但並非最不重要的,該方法在那裏我開始locationUpdates:
@Override
public void onConnected(Bundle bundle) {
Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
latitude =String.valueOf(mLastLocation.getLatitude());
longitude = String.valueOf(mLastLocation.getLongitude());
}
startLocationUpdates();
}
protected void startLocationUpdates() {
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, mLocationRequest, this);
}
一直在被困在這2天了。我確信它的一些非常基本的錯誤,但我不能指出它,我的onDestroy方法已被調用,但即使運行它,該位置仍在更新。爲什麼??我如何徹底殺死這項服務?
你是否也在'selectItem(int)'中重新啓動它? –
服務在onCreate中開始,在點擊按鈕後停止。這兩個方法都包含在問題中。 –
在selectItem(int)之後,我在不同的活動中一起啓動一項新服務。在此之前,我希望服務完全被殺死。 –