Android 关于一项服务的要求

Android 关于一项服务的要求,android,android-service,android-alarms,Android,Android Service,Android Alarms,我通过alarm Manager启动了一个服务,但当我停止该alarm Manager时,该服务的onDestroy方法从未被调用 我的代码: stopService(new Intent(this, YourService.class)); 开始服务 //---------------------------------------------------------------------------------------- //Start

我通过alarm Manager启动了一个服务,但当我停止该alarm Manager时,该服务的onDestroy方法从未被调用

我的代码:

stopService(new Intent(this, YourService.class));
开始服务

            //----------------------------------------------------------------------------------------
            //Starting Alarm Manager for Lat Lng
            //----------------------------------------------------------------------------------------

            AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.add(Calendar.SECOND, 10);
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000*1, pendingIntent);

            //----------------------------------------------------------------------------------------
            //Starting Alarm Manager for Lat Lng
            //----------------------------------------------------------------------------------------
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
public class MyServiceForLatLng extends Service {
double nlat;
double nlng;
double glat;
double glng;

LocationManager glocManager;

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public void onStart(Intent intent, int startId) {
    LocationManager nlocManager   = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    LocationListener nlocListener = new MyLocationListenerNetWork();
    nlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
            1,          
            1,            
            nlocListener);

    glocManager   = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    LocationListener glocListener = new MyLocationListenerGPS();
    glocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
            1,          
            1,            
            glocListener);
    super.onStart(intent, startId);
}

@Override
public void onDestroy() {
    Log.d("destroyed", "On destroyed called");
    super.onDestroy();
}

public class MyLocationListenerNetWork implements LocationListener  
{
    @Override
    public void onLocationChanged(Location loc)
    {
        nlat = loc.getLatitude();
        nlng = loc.getLongitude();

        saveInPreference("nlat",nlat+"");
        saveInPreference("nlng",nlng+"");

        Log.d("LAT & LNG Network:", nlat + " " + nlng);
    }

    @Override
    public void onProviderDisabled(String provider)
    {
        Log.d("LOG", "Network is OFF!");
    }
    @Override
    public void onProviderEnabled(String provider)
    {
        Log.d("LOG", "Thanks for enabling Network !");
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras)
    {
    }
}

public class MyLocationListenerGPS implements LocationListener  
{
    @Override
    public void onLocationChanged(Location loc)
    {
        glat = loc.getLatitude();
        glng = loc.getLongitude();

        saveInPreference("glat",glat+"");
        saveInPreference("glng",glng+"");

        Log.d("LAT & LNG GPS:", glat + " " + glng);
    }

    @Override
    public void onProviderDisabled(String provider)
    {
        Log.d("LOG", "GPS is OFF!");
    }
    @Override
    public void onProviderEnabled(String provider)
    {
        Log.d("LOG", "Thanks for enabling GPS !");
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras)
    {
    }
}

//===================================================================================================================================
//Preference variable
//===================================================================================================================================

//--------------------------------------------
// method to save variable in preference
//--------------------------------------------
public void saveInPreference(String name, String content) {
    SharedPreferences preferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString(name, content);
    editor.commit();
}

//--------------------------------------------
// getting content from preferences
//--------------------------------------------
public String getFromPreference(String variable_name) {
    String preference_return;
    SharedPreferences preferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    preference_return = preferences.getString(variable_name, "");

    return preference_return;
}


//===================================================================================================================================
//Preference variable
//===================================================================================================================================

}
停止服务

            //----------------------------------------------------------------------------------------
            //Starting Alarm Manager for Lat Lng
            //----------------------------------------------------------------------------------------

            AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.add(Calendar.SECOND, 10);
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000*1, pendingIntent);

            //----------------------------------------------------------------------------------------
            //Starting Alarm Manager for Lat Lng
            //----------------------------------------------------------------------------------------
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
public class MyServiceForLatLng extends Service {
double nlat;
double nlng;
double glat;
double glng;

LocationManager glocManager;

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public void onStart(Intent intent, int startId) {
    LocationManager nlocManager   = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    LocationListener nlocListener = new MyLocationListenerNetWork();
    nlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
            1,          
            1,            
            nlocListener);

    glocManager   = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    LocationListener glocListener = new MyLocationListenerGPS();
    glocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
            1,          
            1,            
            glocListener);
    super.onStart(intent, startId);
}

@Override
public void onDestroy() {
    Log.d("destroyed", "On destroyed called");
    super.onDestroy();
}

public class MyLocationListenerNetWork implements LocationListener  
{
    @Override
    public void onLocationChanged(Location loc)
    {
        nlat = loc.getLatitude();
        nlng = loc.getLongitude();

        saveInPreference("nlat",nlat+"");
        saveInPreference("nlng",nlng+"");

        Log.d("LAT & LNG Network:", nlat + " " + nlng);
    }

    @Override
    public void onProviderDisabled(String provider)
    {
        Log.d("LOG", "Network is OFF!");
    }
    @Override
    public void onProviderEnabled(String provider)
    {
        Log.d("LOG", "Thanks for enabling Network !");
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras)
    {
    }
}

public class MyLocationListenerGPS implements LocationListener  
{
    @Override
    public void onLocationChanged(Location loc)
    {
        glat = loc.getLatitude();
        glng = loc.getLongitude();

        saveInPreference("glat",glat+"");
        saveInPreference("glng",glng+"");

        Log.d("LAT & LNG GPS:", glat + " " + glng);
    }

    @Override
    public void onProviderDisabled(String provider)
    {
        Log.d("LOG", "GPS is OFF!");
    }
    @Override
    public void onProviderEnabled(String provider)
    {
        Log.d("LOG", "Thanks for enabling GPS !");
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras)
    {
    }
}

//===================================================================================================================================
//Preference variable
//===================================================================================================================================

//--------------------------------------------
// method to save variable in preference
//--------------------------------------------
public void saveInPreference(String name, String content) {
    SharedPreferences preferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString(name, content);
    editor.commit();
}

//--------------------------------------------
// getting content from preferences
//--------------------------------------------
public String getFromPreference(String variable_name) {
    String preference_return;
    SharedPreferences preferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    preference_return = preferences.getString(variable_name, "");

    return preference_return;
}


//===================================================================================================================================
//Preference variable
//===================================================================================================================================

}
我的服务

            //----------------------------------------------------------------------------------------
            //Starting Alarm Manager for Lat Lng
            //----------------------------------------------------------------------------------------

            AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.add(Calendar.SECOND, 10);
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000*1, pendingIntent);

            //----------------------------------------------------------------------------------------
            //Starting Alarm Manager for Lat Lng
            //----------------------------------------------------------------------------------------
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
public class MyServiceForLatLng extends Service {
double nlat;
double nlng;
double glat;
double glng;

LocationManager glocManager;

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public void onStart(Intent intent, int startId) {
    LocationManager nlocManager   = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    LocationListener nlocListener = new MyLocationListenerNetWork();
    nlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
            1,          
            1,            
            nlocListener);

    glocManager   = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    LocationListener glocListener = new MyLocationListenerGPS();
    glocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
            1,          
            1,            
            glocListener);
    super.onStart(intent, startId);
}

@Override
public void onDestroy() {
    Log.d("destroyed", "On destroyed called");
    super.onDestroy();
}

public class MyLocationListenerNetWork implements LocationListener  
{
    @Override
    public void onLocationChanged(Location loc)
    {
        nlat = loc.getLatitude();
        nlng = loc.getLongitude();

        saveInPreference("nlat",nlat+"");
        saveInPreference("nlng",nlng+"");

        Log.d("LAT & LNG Network:", nlat + " " + nlng);
    }

    @Override
    public void onProviderDisabled(String provider)
    {
        Log.d("LOG", "Network is OFF!");
    }
    @Override
    public void onProviderEnabled(String provider)
    {
        Log.d("LOG", "Thanks for enabling Network !");
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras)
    {
    }
}

public class MyLocationListenerGPS implements LocationListener  
{
    @Override
    public void onLocationChanged(Location loc)
    {
        glat = loc.getLatitude();
        glng = loc.getLongitude();

        saveInPreference("glat",glat+"");
        saveInPreference("glng",glng+"");

        Log.d("LAT & LNG GPS:", glat + " " + glng);
    }

    @Override
    public void onProviderDisabled(String provider)
    {
        Log.d("LOG", "GPS is OFF!");
    }
    @Override
    public void onProviderEnabled(String provider)
    {
        Log.d("LOG", "Thanks for enabling GPS !");
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras)
    {
    }
}

//===================================================================================================================================
//Preference variable
//===================================================================================================================================

//--------------------------------------------
// method to save variable in preference
//--------------------------------------------
public void saveInPreference(String name, String content) {
    SharedPreferences preferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString(name, content);
    editor.commit();
}

//--------------------------------------------
// getting content from preferences
//--------------------------------------------
public String getFromPreference(String variable_name) {
    String preference_return;
    SharedPreferences preferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    preference_return = preferences.getString(variable_name, "");

    return preference_return;
}


//===================================================================================================================================
//Preference variable
//===================================================================================================================================

}
您只是取消alarmManager,这意味着alarmManager不会再次启动服务

要停止服务:

stopService(new Intent(this, YourService.class));
alarmManager.cancel(挂起内容)不停止服务。要停止服务,您可以从服务it self调用stopSelf