stopService не убивает TimerTask, таймер по-прежнему работает каждые 10 секунд на фоне, хотя LiveTrackingService остановлен.Как убить TimerTask реализует LocationListener?
Intent intent = new Intent(getActivity().getApplicationContext(), LiveTrackingService.class);
getActivity().stopService(intent);
Вот LiveTrackingService: (Я хотел бы получить обновление данных местоположения каждый 10SEC до пользователь прекращает обслуживание.)
public class LiveTrackingService extends Service {
final Handler mHandler = new Handler();
private Timer mTimer = new Timer();
protected LocationManager locationManager;
public static final long NOTIFY_INTERVAL = 10 * 1000;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
//schedule task
startService();
}
private void startService()
{
mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL);
}
@Override
public void onDestroy() {
super.onDestroy();
mTimer.cancel();
mTimer.purge();
mTimer=null;
mHandler.removeCallbacksAndMessages(null);
Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
}
private class TimeDisplayTimerTask extends TimerTask implements LocationListener {
@Override
public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
if(checkLocationPermission()) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10 * 1000, 0, TimeDisplayTimerTask.this);
}
}
});
}
@Override
public void onLocationChanged(Location location) {
// I get location and do work here
if (location != null) {
Log.d("onLocationChanged", "onLocationChanged");
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
}
OnDestroy(), как говорят, не то, что надежность. Во всяком случае, это кажется жизнеспособным способом сделать это. Причина, по которой TimerTask не убивается, может быть, тот факт, что ее запуск в ThreadPool сам по себе и служба находится в потоке пользовательского интерфейса. После того, как таймер будет развернут, служба может не иметь контроля над ним. –
Это не сработало, и задача Таймера все еще работает. – arlen