Reciclagem de atividade

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

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *