Liberar Recursos - onDestroy

Galera, peço a ajuda de vocês. Então, o meu problema é o seguinte:

Como liberar recursos ao fechar uma activity no meu app?

Exemplo:

Tela A busca as coordenadas e ao clicar no botão nesta tela, abrirá a tela B que apresentará um mapa com a localização das coordenadas capturadas, percebo que a memoria dobra ao abrir a Tela B e ao fechar a memoria não muda nada.

Isso acontece em outras telas também. Acho que é alguma coisa no onDestroy que não estou conseguindo tratar.

1 curtida

Faz o seguinte, quando você for fazer um intent pra outra activity, limpa a pilha de activitys, exemplo:

Intent newIntent = new Intent(TelaA.this, TelaB.class);
newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(newIntent);

Vai resolver o seu problema.

1 curtida

Mostra o código da sua Tela B.

Leonardo, não deu certo.

Felipe segue a classe todo abaixo. Mas é o seguinte eu apenes dei um exemplo destas duas telas que estou tendo problema. Mais gostaria e entender como liberar recurso ao fechar qualquer tela (desde de uma tela que tenha apena um listview).

public class GpsLocalidadeMapa extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap googleMap;
private GoogleApiClient client;
private Bundle parametro;
private SupportMapFragment mapFragment;

private Button btnTipoMapa;

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_localidade_mapa);

	btnTipoMapa = (Button) findViewById(R.id.alm_btn_tipomapa);
	btnTipoMapa.setText("SATELITE");

    Intent it = getIntent();
    parametro = it.getExtras();

    mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

@Override
protected void onDestroy() {
}

@Override
public void onMapReady(final GoogleMap map) {
	this.googleMap = map;
    configMap(parametro.getDouble("LATITUDE", 0.0), parametro.getDouble("LONGITUDE", 0.0), parametro.getString("CLIENTE"), false);
    client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}

public void onClickSetTipoMapa(View view) {
	String textBtn = btnTipoMapa.getText().toString();
	if (textBtn.equals("MAPA")) {
		btnTipoMapa.setText("SATELITE");
		configMap(parametro.getDouble("LATITUDE", 0.0), parametro.getDouble("LONGITUDE", 0.0), parametro.getString("CLIENTE"), false);
	} else {
		btnTipoMapa.setText("MAPA");
		configMap(parametro.getDouble("LATITUDE", 0.0), parametro.getDouble("LONGITUDE", 0.0), parametro.getString("CLIENTE"), true);
	}
}

public void configMap(double latidude, double longitude, String cliente, boolean isTipoMapa) {
	if (isTipoMapa) {
		googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
	} else {
		googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
	}
	LatLng latLng = new LatLng(latidude, longitude);
	// .bearing(0) - Rotação ---- .zoom(20) - Zoom ---- .tilt(15) - Grau de Visualização
	CameraPosition cameraPosition = new CameraPosition.Builder().target(latLng).zoom(18).tilt(15).build();
	CameraUpdate update = CameraUpdateFactory.newCameraPosition(cameraPosition);
	googleMap.moveCamera(update);
	// MARKERS
	customAddMarker(new LatLng(latidude, longitude), "", cliente);
}

public void customAddMarker(LatLng latLng, String title, String snippet) {
	MarkerOptions options = new MarkerOptions();
	options.position(latLng).title(title).snippet(snippet).draggable(true);
	options.icon(BitmapDescriptorFactory.fromResource(R.drawable.localizacao));
	Marker marker = googleMap.addMarker(options);
}
}

Obrigado pela atenção.

Leandrooooo

O Android já faz por padrão a liberação dos recursos de uma Activity quando ela é fechada.

O problema é que você sobrescreveu o método onDestroy e removeu o comportamento padrão. Veja:

@Override
protected void onDestroy() {
}

Caso queira deixar o onDestroy, ao menos deixe a chamada ao super:

@Override
protected void onDestroy() {
    super.onDestroy();
}