Hoje, estamos desmontando o questionário Android da conferência para desenvolvedores móveis Mobius 2018 Moscow.
O formato era bastante padrão: 15 perguntas com 4 respostas possíveis. Prazo de 30 segundos para cada pergunta.

Vamos lá!
Pergunta 1
ExplicaçõesTodo mundo sabe que cada nova versão do Android recebe um nome de código para doces e eles são atribuídos em ordem alfabética (Cupcake, Donut, Eclair, etc.).
No entanto, inicialmente, os desenvolvedores planejaram nomear as versões usando nomes de robôs fictícios. Portanto, as primeiras versões do Android foram chamadas Astra boy e Bender . Estes eram lançamentos internos antes do lançamento da versão 1.0 sem nome. No entanto, por certas razões, o vetor mudou e, na versão 1.1, foi decidido chamar Petit Four . Esta foi a primeira versão doce do Android. E já começando com a próxima versão (Cupcake 1.5), os nomes começaram a ser atribuídos em ordem alfabética.
Fonte
Questão 2
ExplicaçõesCom o lançamento da API 23 (Marshmallow), o Android introduziu o novo conceito de permissões de tempo de execução . Esse recurso deveria adicionar transparência para os usuários às permissões concedidas ao aplicativo. Antes do lançamento de “marshmallows”, as permissões eram emitidas no momento da instalação do aplicativo.
Fonte
Observe que o Android contém mais de 100 permissões exclusivas.
Pergunta 3
Explicações
measure () - chamado para determinar os requisitos de tamanho da View e de todos os seus filhos.
onMeasure () - chamado de measure () para realizar o trabalho real de dimensionamento da View.
onLayout () - chamado para colocar um elemento dentro de um contêiner
onDraw () - chamado para renderizar o conteúdo da exibição.
Mais informações sobre a renderização do View podem ser encontradas aqui .
Pergunta 4
ExplicaçõesNão há método isUserSmell () no SDK. Talvez no futuro, com o advento de sensores apropriados nos dispositivos ...
Vamos ver o que o restante dos métodos faz:
isUserMonkey () - o método foi projetado para verificar se o usuário é um teste na estrutura do teste de macaco automatizado.
isUserAGoat () - a partir da API 21, verifica se o aplicativo Goat Simulator GoatZ está instalado. Nas versões abaixo, o método sempre retorna false. Localizado na classe android.os.UserManager
.
isFinalCountdown () - o método abre o clipe da banda Europa “The Final Countdown”. Adicionado à API 26. Localizado na classe android.widget.Chronometer
.
Questão 5
A resposta private static final int mobius = 2018
ExplicaçõesEsse conhecimento testado da palavra-chave const
, que é usado para declarar compile time constants
. No mundo Java, isso corresponde a modificadores static final
.
Pergunta 6
ExplicaçõesEnquanto os desenvolvedores ouviram xhdpi e mdpi , as coisas são diferentes com o tvdpi . Ele não ganhou popularidade e, portanto, existem muito poucos dispositivos na categoria tvdpi , mas eles eram. O mais famoso deles é o Nexus 7 (2012).
Fonte
Observe que tvdpi possui um coeficiente de 1,3 em relação a mdpi.
Pergunta 7
ExplicaçõesAAPT (Ferramenta de empacotamento de ativos Android) - Uma ferramenta Android para criar arquivos .APK.
Condicionalmente, o trabalho desse utilitário pode ser dividido em dois estágios:
Compilação. Nesta fase, os recursos estão sendo preparados: a classe R é gerada, os recursos XML são traduzidos para o formato binário, processamento PNG, etc.
- Embalagem (ligação). Todos os arquivos intermediários criados no estágio de compilação são compactados no APK.
Quanto às opções de resposta restantes:
- A ofuscação do código geralmente é feita por programa.
- Java bytecode é o resultado do Java Compiler, que converte o código-fonte em Java bytecode.
- Dalvik bytecode é o resultado do Dalvik Compiler (DX, D8), que converte .class (Java bytecode) em .dex (Dalvik bytecode). O código-fonte no bytecode Dalvik não é transmitido diretamente.
O processo de criação de um aplicativo Android é descrito na documentação .
Pergunta 8
ExplicaçõesAcima, RIGHT OUTER JOIN não é suportado.
Fonte
Pergunta 9
ExplicaçõesNome | Densidade |
---|
ldpi | 0,75 |
mdpi | 1 |
tvdpi | 1.3 |
hdpi | 1.5 |
xhdpi | 2 |
xxhdpi | 3 e 2.6 |
xxxhdpi | 4 e 3,5 |
Pergunta 10
ExplicaçõesART (Android RunTime) é o novo tempo de execução do bytecode DEX que substitui o Dalvik. A diferença mais significativa entre Dalvik e ART é que Dalvik é baseado na compilação JIT ( Just-in-Time ), enquanto o ART é baseado em AOT ( Ahead-of-Time ). Em termos gerais, isso significa que a Dalvik converte o código de dalvik byte no código da máquina toda vez que o aplicativo é executado, e o ART faz isso uma vez, durante a instalação do aplicativo, armazenando o resultado na memória do dispositivo. Isso leva a um lançamento e execução mais rápidos de aplicativos no ART em comparação com o Dalvik, mas também aumenta o tempo de instalação do aplicativo. Além disso, o ART realizou a otimização do GC e também adicionou várias funções para melhorar o desenvolvimento e a depuração de aplicativos.
ART e Dalvik

Além disso, vale a pena notar que o ART também inclui um compilador JIT que complementa o AOT. Leia mais sobre isso aqui .
Pergunta 11
ExplicaçõesBEIJO (Mantenha Simples, Estúpido) - não complique!
SECO (não se repita), MORRE (Duplicação É Mal) - não repita!
WTF (a quantidade de "chazan" por segundo) é uma unidade de medida da qualidade do código para uma revisão.
YAGNI (você não vai precisar) - você não vai precisar!
Pergunta 12
A resposta Application Not Responding
ExplicaçõesANR (Aplicativo Não Responde) - um problema que ocorre quando o encadeamento principal do aplicativo não pode processar eventos do usuário e redesenhar a interface do usuário.
No Android, a capacidade de resposta de um aplicativo é monitorada pelos serviços do sistema ActivityManager
e WindowManager
. Se uma das seguintes condições for verdadeira:
- não há reação aos eventos de entrada (eventos pressionados por teclas e teclas),
- BroadcastReceiver não é concluído dentro de 10 segundos,
o sistema notificará o usuário do problema, mostrando a caixa de diálogo ANR correspondente.
Pergunta 13
ExplicaçõesO MeasureSpec foi projetado para transferir requisitos de tamanho dos componentes de exibição pai para filho. Esses requisitos são compilados em duas dimensões: largura e altura. Os valores para cada uma das medidas são compostos: a primeira parte contém informações sobre o espaço disponível (em pixels), a segunda parte contém restrições sobre o uso do espaço disponível. Essas restrições podem incluir o seguinte:
MeasureSpec.UNSPECIFIED - sem restrições, a visualização pode ter o tamanho que for necessário.
MeasureSpec.EXACTLY - tamanhos exatos são definidos, veja essas bordas serão fornecidas.
MeasureSpec.AT_MOST - tamanhos máximos determinados. A vista pode ser tão grande quanto desejar, mas até o tamanho especificado.
Pergunta 14
Explicações
Kernel do Linux (kernel do Linux) - essa camada fornece o funcionamento do sistema e é responsável pela segurança, gerenciamento de memória, processos e também fornece uma pilha de rede e um modelo de driver (driver de vídeo, driver de câmera e outros drivers).
Bibliotecas (bibliotecas) é uma camada intermediária de software projetada para fornecer funcionalidade básica para aplicativos como suporte a formatos de arquivo, informações de codificação e decodificação (por exemplo, codecs), renderização de gráficos e muito mais (Surface Manager, Media Framework, SQLite e outro).
Tempo de execução do Android - localizado no mesmo nível das bibliotecas. Os principais componentes aqui são a Dalvik VM e várias bibliotecas principais (principais bibliotecas).
Estrutura de Aplicação - nível da estrutura de aplicação. É através das estruturas de aplicativos que os desenvolvedores obtêm acesso às APIs que estão abaixo do nível. Eles incluem: ActivityManager, Gerenciador de Pacotes, Gerenciador de Janelas etc.
Aplicativos - o nível de aplicativos, básicos (pré-instalados no sistema operacional: navegador, calendário, contatos etc.) e instalados pelo usuário.
Observe que os autores do questionário são da velha escola, porque na documentação oficial, as camadas são destacadas de outra maneira: source.android.com/devices/architecture .
Pergunta 15
ExplicaçõesIr para - pule para outra instrução.
invokeinterface - usado para chamar métodos de interface.
invokestatic - usado para chamar métodos estáticos.
Descrição de outras instruções .