Tratamento de dados quando a atividade é reciclada
Quando uma atividade entra no estado parado, ela pode ser reciclada pelo sistema.
Por exemplo, quando a Atividade A inicia a Atividade B, a Atividade A passa para o estado parado. Se o sistema reciclar a Atividade A devido à falta de memória e o usuário pressionar o botão Voltar para retornar à Atividade A,
a Atividade A será exibida normalmente. No entanto, nesse caso, o método onRestart() não será chamado; em vez disso, o onCreate() será executado, pois a Atividade A está sendo recriada.
Se a Atividade A continha dados temporários, como um texto digitado em um campo, esses dados serão perdidos quando a atividade for reciclada.
Se isso acontecer em nosso aplicativo, afetará negativamente a experiência do usuário.
Felizmente, o Android fornece um método de callback chamado onSaveInstanceState(), que tem a garantia de ser chamado antes que a atividade seja reciclada.
Isso nos permite resolver o problema da perda de dados temporários quando a atividade é reciclada.
O método onSaveInstanceState() recebe um parâmetro do tipo Bundle.
A classe Bundle fornece vários métodos para salvar dados, como putString() para strings e putInt() para números inteiros.
Sobrescrevendo o método onSaveInstanceState
// Português
@Override
protected void onSaveInstanceState(Bundle outState) { // Este método é chamado antes da atividade ser reciclada
super.onSaveInstanceState(outState);
outState.putString("user_name", "Srta. Pan");
}Code language: JavaScript (javascript)
// Português
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e(TAG, "onCreate: ");
if (savedInstanceState != null) // No onCreate, podemos verificar se o Bundle contém dados; se tiver, significa que a atividade foi reciclada e está sendo recriada
{
Log.e(TAG, savedInstanceState.getString("user_name"));
}
}Code language: JavaScript (javascript)
Obtendo os dados do Bundle ao recriar a atividade
No método onCreate, o sistema passa um parâmetro do tipo Bundle:
// Português
protected void onCreate(Bundle savedInstanceState) {Code language: JavaScript (javascript)
Obtendo os dados do Bundle
// Português
if (savedInstanceState != null) // No onCreate, podemos verificar se o Bundle contém dados; se tiver, significa que a atividade foi reciclada e está sendo recriada
{
Log.e(TAG, savedInstanceState.getString("user_name"));
}Code language: JavaScript (javascript)
Reciclagem de atividade