Q:

Es posible desactivar el gps para reducir el consumo de bateria en una app? 

Estoy empleando el GPS en mi aplicación para definir la ubicación exacta del Smartphone,(latitud y longitud), aunado a esto recibo las coordenadas en un Geocoder para obtener el nombre de la calle según las coordenadas, el problema es que la aplicación consume mucha batería por lo que me gustaría que se ejecutara la actualización de coordenadas que estoy empleando solo 3 veces cada vez que ejecute el OnClickListener, y al terminar de hacerlo el GPS se desactive, o que la aplicación deje de ejecutar el método que llama a la actualización de coordenadas por medio del GPS, como podría hacerlo?  alguna sugerencia?  
Aquí mi código:
GPS.setOnClickListener(new View. OnClickListener() {
        @Override
        public void onClick(View v) {
            FuntionGPS();
            Dialog();
        }
    });

public void FuntionGPS() {
        LocationManager mlocManager = (LocationManager) getSystemService(Context. LOCATION_SERVICE);
        Localizacion Local = new Localizacion();
        Local.setGPSActivity(this);
        assert mlocManager ! = null;
        boolean gpsEnabled = mlocManager.isProviderEnabled(LocationManager. GPS_PROVIDER);
        if (! gpsEnabled) {
            Intent settingsIntent = new Intent(Settings. ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(settingsIntent);
        }
        if (ActivityCompat.checkSelfPermission(this,
                Manifest.permission. ACCESS_FINE_LOCATION) ! = PackageManager. PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission. ACCESS_COARSE_LOCATION) ! = PackageManager. PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission. ACCESS_FINE_LOCATION,}, 1000);
            return;
        }
        mlocManager.requestLocationUpdates(LocationManager. NETWORK_PROVIDER, 20 * 1000, 10, (LocationListener) Local);
        mlocManager.requestLocationUpdates(LocationManager. GPS_PROVIDER, 2 * 20 * 1000, 10, (LocationListener) Local);
    }

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == 1000) {
        if (grantResults[0] == PackageManager. PERMISSION_GRANTED) {
            FuntionGPS();
        }
    }
}

public void setLocation(android.location. Location loc) {
    //Obtener la direccion de la calle a partir de la latitud y la longitud
    if (loc.getLatitude() ! = 0.0 && loc.getLongitude() ! = 0.0) {
        try {
            Geocoder geocoder = new Geocoder(this, Locale.getDefault());
            List<Address> list = geocoder.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1);
            if (! list.isEmpty()) {
                final Address DirCalle = list.get(0);
                DirCalle.getAddressLine(0);
                Call<com.model. Location> local = SmartApiAdapter.getApiService().Location(loc.getLatitude(),loc.getLongitude(),DirCalle.getAddressLine(0));
                local.enqueue(new Callback<Location>() {
                    @Override
                    public void onResponse(Call<Location> call, Response<Location> response) {
                        Toast.makeText(getBaseContext(),"Ubicacion actualizada", Toast. LENGTH_LONG).show();
                    }
                    @Override
                    public void onFailure(Call<Location> call, Throwable t) {
                        Toast.makeText(getBaseContext(),"Ultima ubicacion conocida: \n"+DirCalle.getAddressLine(0),Toast. LENGTH_LONG).show();
                    }
                });
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public class Localizacion implements LocationListener {

    MainActivity gpsActivity;

    public MainActivity getGpsActivity() {
        return gpsActivity;
    }
    void setGPSActivity(MainActivity gpsActivity) {
        this.gpsActivity = gpsActivity;
    }
    @Override
    public void onLocationChanged(android.location. Location loc) {
        loc.getLatitude();
        loc.getLongitude();
        timer1();
        this.gpsActivity.setLocation(loc);
        }
    @Override
    public void onProviderDisabled(String provider) {
        Toast.makeText(getBaseContext(), "GPS desactivado", Toast. LENGTH_LONG).show();
    }
    @Override
    public void onProviderEnabled(String provider) {
        Toast.makeText(getBaseContext(),"GPS Activado", Toast. LENGTH_LONG).show();
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        switch (status) {
            case LocationProvider. AVAILABLE:
                Log.d("debug", "LocationProvider. AVAILABLE");
                break;
            case LocationProvider. OUT_OF_SERVICE:
                Log.d("debug", "LocationProvider. OUT_OF_SERVICE");
                break;
            case LocationProvider. TEMPORARILY_UNAVAILABLE:
                Log.d("debug", "LocationProvider. TEMPORARILY_UNAVAILABLE");
                break;
        }
    }

}

A:

Si estas usando como proveedor únicamente el GPS, 
locManager.isProviderEnabled(LocationManager. GPS_PROVIDER);

si desactivas el GPS en realidad no podrías obtener información relacionada a la geo localización. 
Para reducir el consumo de batería, en este caso puedes es usar el NETWORK_PROVIDER y si no existe usar GPS_PROVIDER ya que el GPS_PROVIDER consume más batería ya que implica uso de hardware. 
 boolean gpsEnabled = mlocManager.isProviderEnabled(LocationManager. GPS_PROVIDER);
 boolean netEnabled = mlocManager.isProviderEnabled(LocationManager. NETWORK_PROVIDER);

    if(netEnabled){
            mlocManager.requestLocationUpdates(LocationManager. NETWORK_PROVIDER, 20 * 1000, 10, (LocationListener) Local);
    }else if(gpsEnabled){
            mlocManager.requestLocationUpdates(LocationManager. GPS_PROVIDER, 2 * 20 * 1000, 10, (LocationListener) Local);
    }

Existe una API que optimiza la obtención de datos y es lo recomendable, se llama FusedLocationProviderClient
Aquí encuentras un excelente ejemplo.