27 perguntas · Android
Perguntas de entrevista para Desenvolvedor Android
Perguntas para entrevistar desenvolvedores Android: Kotlin, ciclo de vida de activities e fragments, coroutines, Jetpack Compose e arquitetura. Para separar quem segue tutorial de quem publica apps estáveis em milhões de aparelhos.
Contratar um desenvolvedor Android é testar um tipo específico de disciplina: escrever código que se comporta bem dentro de um ciclo de vida que você não controla. Diferente de um serviço de backend, um app Android é interrompido o tempo todo. A tela gira, chega uma ligação, o sistema mata o processo para liberar memória, o usuário deixa o app em segundo plano por três dias e volta esperando encontrar tudo como estava.
Quem não entende a fundo o ciclo de vida de activities e fragments escreve código que vaza memória, perde estado na rotação ou quebra quando uma mudança de configuração recria a activity. Além disso, o Android moderno prioriza o Kotlin: você quer fluência em null safety, coroutines e concorrência estruturada para trabalho assíncrono e, cada vez mais, Jetpack Compose para UI declarativa.
O sinal mais forte é o julgamento de arquitetura. A pessoa tira a lógica de activities e fragments, usa um ViewModel que sobrevive a mudanças de configuração, pensa em main thread versus dispatchers de background e se preocupa com memória, bateria e travamentos em aparelhos reais, não só num emulador rápido? Combine duas perguntas de ciclo de vida com um cenário de coroutines e uma conversa sobre "o app está travando e vazando memória", e você vai saber rápido se a pessoa já manteve um app em produção ou só construiu exemplos.
Fundamentos de Kotlin7 perguntas
Como funciona o null safety do Kotlin e qual a diferença entre ?., !! e o operador Elvis ?:?
O que observar: Tipos anuláveis checados pelo compilador, chamada segura, valor padrão com Elvis e a noção de que !! é um crash à espera de acontecer.
Qual a diferença entre val e var, e entre um val e um const val?
O que observar: Referência imutável versus mutável, e const val como constante de compilação, só para tipos primitivos e String no nível superior ou em objetos.
Explique as data classes: o que elas entregam de graça e quando você não usaria uma?
O que observar: equals, hashCode, toString, copy e componentN gerados, e cuidado com herança e com classes que carregam comportamento ou identidade.
O que são extension functions e quando você usou uma para deixar o código mais limpo?
O que observar: Um exemplo real e a noção de que são resolvidas estaticamente, sem acesso a membros privados da classe.
Qual a diferença entre um companion object e uma função de nível superior?
O que observar: Companion ligado à classe (fábricas, constantes relacionadas) versus função solta no arquivo, e quando cada um deixa o código mais claro.
Explique funções de ordem superior e lambdas, e como o inline muda o comportamento delas.
O que observar: Funções que recebem ou devolvem funções, e inline evitando a alocação da lambda e permitindo return não local.
Qual a diferença entre List, MutableList e Sequence em Kotlin?
O que observar: Leitura versus escrita na interface, e Sequence com avaliação preguiçosa que evita coleções intermediárias em cadeias longas.
Ciclo de vida e componentes7 perguntas
Explique o ciclo de vida de uma activity. O que acontece quando a tela gira e como você preserva o estado?
O que observar: Que a activity é destruída e recriada, a ordem dos callbacks e o uso de ViewModel e de estado salvo para não perder dados.
O que é um ViewModel e por que ele sobrevive a uma mudança de configuração quando a activity não sobrevive?
O que observar: Escopo ligado ao ViewModelStore, que é mantido na recriação, e a ressalva de que ele não sobrevive à morte do processo.
Qual a diferença entre activity e fragment, e quando você usa cada um?
O que observar: Activity como ponto de entrada e fragment como parte reutilizável da tela, com alguma menção à navegação com uma única activity.
Em que o ciclo de vida do fragment difere do da activity, principalmente em relação à view?
O que observar: Que a view do fragment pode ser destruída enquanto o fragment vive, e o uso de viewLifecycleOwner para não vazar observadores.
O que causa vazamento de memória ao segurar um Context ou uma View, e como você evita?
O que observar: Referências longas (singletons, estáticos, callbacks) a uma activity destruída, e soluções como applicationContext e limpeza no momento certo.
Como você passa dados entre fragments com segurança e por que o tamanho do Bundle é limitado?
O que observar: ViewModel compartilhado ou argumentos da navegação, e o limite de transação do Binder que gera TransactionTooLargeException.
Quando usar savedInstanceState e quando usar ViewModel para sobreviver à morte do processo?
O que observar: Estado pequeno e essencial no estado salvo (ou SavedStateHandle) e dados maiores recarregados da fonte, já que o ViewModel morre com o processo.
Coroutines e código assíncrono6 perguntas
Que problema as coroutines resolvem em relação a callbacks e AsyncTask, e o que é uma suspend function?
O que observar: Código assíncrono escrito de forma sequencial, sem aninhar callbacks, e suspend como função que pode pausar sem bloquear a thread.
Explique concorrência estruturada e o que um CoroutineScope oferece.
O que observar: Coroutines filhas presas ao escopo, cancelamento em cascata e erros que sobem para o pai em vez de sumir.
Qual a diferença entre Dispatchers.Main, Dispatchers.IO e Dispatchers.Default?
O que observar: UI na Main, operações de I/O bloqueantes no IO e trabalho pesado de CPU no Default, com withContext para trocar.
Por que lançar coroutines no viewModelScope e o que acontece com elas quando o ViewModel é limpo?
O que observar: Que elas são canceladas automaticamente no onCleared, evitando trabalho órfão e vazamentos.
Qual a diferença entre launch e async/await?
O que observar: launch para disparar sem resultado e async quando é preciso um valor, com atenção ao tratamento de exceções em cada um.
O que são Flow e StateFlow, e quando você os usaria no lugar de LiveData?
O que observar: Fluxo frio versus estado quente com valor atual, coleta ciente do ciclo de vida (repeatOnLifecycle) e operadores mais ricos que os do LiveData.
UI, arquitetura e performance7 perguntas
O que muda no seu modelo mental ao sair das views em XML para a UI declarativa do Jetpack Compose?
O que observar: A UI como função do estado, sem manipular views diretamente, e o estado subindo para quem o controla.
O que é recomposição no Compose e como você evita recomposições desnecessárias?
O que observar: Reexecução de funções quando o estado lido muda, e técnicas como remember, tipos estáveis, chaves em listas e derivedStateOf.
Explique uma arquitetura MVVM no Android e onde entra o repositório.
O que observar: View observando estado do ViewModel, que fala com um repositório responsável por decidir entre rede e cache local.
Uma lista rola com engasgos visíveis. Como você diagnostica e corrige?
O que observar: Medir antes (profiler, rastros de renderização), depois tirar trabalho da main thread, otimizar imagens e reduzir layouts aninhados ou recomposições.
Como você mantém a main thread livre e o que é um ANR?
O que observar: O app não responde por alguns segundos porque a main thread está bloqueada; solução é mover I/O e processamento para outros dispatchers.
Como você reduziria o consumo de bateria e de memória de um app?
O que observar: WorkManager para trabalho em segundo plano, menos wakeups e localização, cache de imagens bem dimensionado e caça a vazamentos.
Como você faz injeção de dependência e o que o Hilt ou o Dagger oferecem?
O que observar: Dependências declaradas e fornecidas de fora, escopos ligados ao ciclo de vida e testes mais fáceis com substituição de implementações.
Dicas para a entrevista de Desenvolvedor Android
- Aperte no ciclo de vida. Rotação e morte de processo revelam mais habilidade real de Android do que qualquer pergunta de sintaxe.
- Valorize quem diz exatamente em qual dispatcher ou thread um trecho de código roda. Esse hábito evita ANRs.
- Pergunte sobre um vazamento de memória ou travamento que a pessoa corrigiu num aparelho de verdade, não num emulador.
- Procure pensamento de concorrência estruturada. Coroutines vazando para fora de um escopo são um bug comum em produção.
- Não dê peso demais à API mais nova do Compose. Fundamentos de ciclo de vida e arquitetura importam muito mais.
- Desconfie de quem coloca lógica em activities e fragments. Isso indica um modelo mental de arquitetura raso.
FAQ
Perguntas frequentes
Quais habilidades um desenvolvedor Android precisa ter?
Kotlin sólido, domínio do ciclo de vida de activities e fragments, coroutines para trabalho assíncrono, uma arquitetura como MVVM com ViewModels e repositórios e, cada vez mais, Jetpack Compose. Acima de tudo, disciplina para escrever código que sobrevive a mudanças de configuração e à morte do processo.
Como as perguntas mudam entre Android júnior e sênior?
O júnior constrói uma tela que funciona. O sênior explica o que acontece na rotação e na morte do processo, em qual thread cada trabalho roda, como evita vazamentos de memória e cita problemas de travamento ou crash que corrigiu num app publicado.
Devo testar Java ou Kotlin em vagas Android?
Kotlin é o padrão do Android moderno, então concentre-se nele. Um pouco de Java ajuda a manter código legado, mas null safety, coroutines e Compose em Kotlin devem trazer a maior parte do sinal.
Vale aplicar um desafio técnico para Android?
Sim. Uma funcionalidade pequena que lide com rotação e uma chamada assíncrona, ou a correção de um vazamento num app de exemplo, mostra os hábitos reais. Combine o desafio com estas perguntas para avaliar o julgamento de arquitetura, não só o resultado.
Como triar candidatos a desenvolvedor Android antes da entrevista?
Use perguntas de triagem na candidatura ou um teste curto de habilidades para filtrar quem entende de verdade Kotlin e ciclo de vida antes de gastar tempo de entrevista. Na Hireaan, as perguntas de triagem, os testes de habilidades e o ranking com IA ajudam a ver primeiro os candidatos mais fortes.
Mais bancos de perguntas de entrevista
- AWSPerguntas para Engenheiro de cloud AWSSaiba mais
- SegurançaPerguntas para Analista de cibersegurançaSaiba mais
- DevOpsPerguntas para Engenheiro DevOpsSaiba mais
- C# / .NETPerguntas para Desenvolvedor C# / .NETSaiba mais
- GoPerguntas para Desenvolvedor GoSaiba mais
- iOSPerguntas para Desenvolvedor iOSSaiba mais
Abriu a vaga de Desenvolvedor Android? Rode o processo na Hireaan.
A IA ranqueia os candidatos, você agenda as entrevistas, aplica testes de habilidades e envia a proposta, com um preço fixo para o time inteiro.
- 14 dias grátis
- Sem cartão de crédito
- Cancele quando quiser
- Conforme a LGPD
