Sobes.tech
Middle

Qual é a especificidade da troca de posições na plataforma Android?

sobes.tech IA

Resposta da IA

Ao alterar posições (rotação de ecrã ou outras alterações de configuração) no Android, a Activity atual é destruída e uma nova é criada.

O que acontece:

  • Os ciclos de vida da antiga Activity são chamados: onPause(), onStop(), onDestroy().
  • A antiga Activity é removida da memória.
  • Uma nova Activity é criada.
  • Os ciclos de vida da nova Activity são chamados: onCreate(), onStart(), onResume().

Especificidades para QA:

  • Perda de dados: Dados não guardados nos campos de entrada, elementos selecionados em listas, etc., podem ser perdidos se a sua preservação não for implementada.
  • Estado da UI: A visibilidade dos elementos, a posição do scroll, as abas selecionadas e outros estados da UI podem ser redefinidos para o padrão.
  • Operações em segundo plano: Tarefas em background em execução (como carregamento de dados) podem ser interrompidas ou terminarem incorretamente.
  • Desempenho: Múltiplas mudanças de configuração podem diminuir a performance da aplicação devido à constante recriação da Activity.
  • Fugas de memória: Gestão incorreta de recursos (como Listeners não desregistrados em onDestroy()) pode levar a fugas de memória.

Como é tratado pelos desenvolvedores (e o que o QA deve verificar primeiro):

  • Guardar estado: Uso de onSaveInstanceState(), onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC).
    // Exemplo de guardar dados em onSaveInstanceState()
    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("saved_text", myEditText.getText().toString());
    }
    
    // Exemplo de restaurar dados em onCreate()
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        if (savedInstanceState != null) {
            String savedText = savedInstanceState.getString("saved_text");
            if (savedText != null) {
                myEditText.setText(savedText);
            }
        }
    }
    
  • Tratamento de mudanças de configuração: Declaração de android:configChanges no AndroidManifest.xml para casos onde a recriação da Activity não é necessária (cenário menos comum para mudança de orientação, mas utilizado para outras mudanças de configuração).
  • Ciclo de vida do ViewModel: O ViewModel mantém seu estado durante mudanças de configuração e não é destruído junto com a Activity.
  • Fragments: Gestão adequada do ciclo de vida dos Fragments.

Testes específicos para mudança de posições:

  • Simulação de rotações em diferentes dispositivos e emuladores.
  • Teste de guardar e restaurar dados após mudança de posição.
  • Verificação do estado da UI (visibilidade, texto, scroll, elementos selecionados).
  • Teste de interrupção e continuação de tarefas em background.
  • Verificação de fugas de memória (uso do Android Profiler).
  • Testes de stress: mudanças rápidas e repetidas de posição.

Ferramentas para QA:

  • Android Studio (para depuração, visualização de logs, uso do Profiler).
  • comandos adb para simular rotações.
  • diferentes emuladores e dispositivos reais com diferentes resoluções e versões do Android.