Expectativa de respostas Prova Objetiva Questão Resposta 1 A 2 A 3 C 4 B 5 B 6 ANULADA 7 A 8 D 9 A 10 C 11 B 12 ANULADA 13 C 14 D 15 B 16 B 17 ANULADA 18 C 19 C 20 C Prova Discursiva 1. Explique cada um dos diferentes métodos do ciclo de vida de uma Activity e comente sobre o uso dos mesmos. Como expectativa de resposta, o candidato deve indicar que para a plataforma Android, uma Activity representa um estado da aplicação em um dado instante, durante sua execução. Desta forma, o ciclo de vida de uma Activity corresponde aos possíveis estados de uma aplicação, e como são feitas as transições entre estes estados. Uma representação clássica para este ciclo de vida é através de uma máquina de estados finitos, como apresentada na Figura a seguir.
1. No caso em questão, cada estado é representado por um método particular da classe Activity. São eles: oncreate(), onstart(), onresume(), onpause(), onstop(), onrestart() e ondestroy(). A seguir, cada estado/método é detalhado: 2. oncreate(bundle): Método obrigatório e é chamado uma única vez, quando um Activity é iniciada. Geralmente é a responsável por carregar os layouts XML e outras operações de inicialização, além de definir uma View, que constrói a interface na tela. Após a chamada do método oncreate(bundle), o método onstart() é chamando para iniciar o ciclo de vida da Activity. 3. onstart(): É chamado quando a Activity fica visível ao usuário (chamado também de receber o foco) e já possui uma View. 4. onrestart(): Este método é chamando quando uma Activity foi parada temporariamente e está sendo reiniciada. O método onrestart() chama o método onstart() automaticamente. 5. onresume(): Representa o estado de que a Activity vai para execução, sendo chamado sempre depois do método onstart().
6. onpause(): método chamado caso algum evento ocorra e precise interromper a execução da Activity, como por exemplo, o celular entrar em espera para economizar energia. Este método salva o estado da Activity para que possa ser recuperado no método onresume(). 7. onstop(): Este método é chamado quando a Activity está sendo encerrada, e não está mais sendo visível ao usuário, sendo que pode ocorrer quando outra Activity está sendo iniciada. Depois de parada, a Activity pode ser reiniciada com o método onrestart(). 8. ondestroy(): Este, literalmente encerra a execução de uma Activity. Este método pode ser chamado pelo próprio Android, para liberar recursos ou pelo método finish() da classe Activity. 2. Em relação aos quatro tipos de componentes do Android, explique o que eles são, para quê servem e como implementá-los. Nessa questão o candidato deve citar os 4 tipos de componentes do Android: Activites, Services, Content Providers e Broadcast Receivers. Além disso ele deve explicar (i) o que cada um deles representa numa aplicação android, (ii) para que eles servem e (iii) como implementa-los. Ao descrever o que eles representam (ou o que são, conforme o texto da questão), é vital que seja descrito conceitualmente o que é o componente. Para efeito de correção, pode-se tomar por base que: 1. Activities devem ser descritas como representam uma única tela com uma interface de usuário ; 2. Services devem ser definidos como componentes que são executados em segundo plano para executar operações de longa duração ou para realizar tarefas para processos remotos. 3. Content Provider deve ser descrito como responsável por gerenciar um conjunto compartilhado de dados do aplicativo. 4. Broadcast Receiver deve ser descrito como o componente que responde às mensagens de Broadcast do sistema. No quesito para o que eles servem é desejável que seja usado um exemplo para descrever um uso de cada componente. No quesito como implementa-los, é preciso descrever o código para implementar cada uma das componentes: Para as Activities é preciso descrever que são criadas por herança; que métodos importantes (como oncreate) devem ser sobrescritos; que as mesmas devem ser declaradas no arquivo de manifest; e por fim falar sobre o uso de Intents; Sobre Services é preciso falar sobre os métodos que devem ser sobrescritos (onstartcommand e onbind) e como eles se relacionam com o estado do serviço. É importante falar sobre como executar um serviço no plano de fundo (citando o metodo startforeground()); Sobre ContentProvider é preciso citar o métodos que devem ser implementados: query(), insert(), update(), delete(), gettype() e oncreate(), visto que a classe pai é abstrata.
Um BroadcastReceiver é implementado como uma sub-classe da classe BroadcastReceiver, e cada mensagem de broadcast é distribuída como um objeto Intent. 3. Explique as diferentes maneiras de se comunicar com um servidor a partir do Android. Além disso, avalie cada uma das abordagens, apontando vantagens e desvantagens das mesmas. A resposta deverá contemplar ao menos 3 maneiras de se comunicar com um servidor a partir do Android. SOCKETS Vantagem: possibilidade de se comunicar com qualquer servidor através de TCP. Maior controle sobre a conexão. Desvantagem: Implementação manual do protocolo de comunicação utilizado. Necessidade de gerenciamento da conexão, incluíndo processamento de mensagens (streams) enviadas/recebidas, e tratamento de erros. Maior complexidade do código. HTTP (Webview) A aplicação se utiliza do protocolo HTTP e comunica-se o servidor como se estivesse acessando uma página HTML. Vantagem: Facilidade de uso (devido ao HTTP). Desvantagem: Pouco controle. A aplicação exibirá páginas HTML fornecidas pelo servidor. Serviços WEB (SOAP/REST) Vantagem: Especificação com protocolo bem definido. Simplicidade de utilização. Baseado no protocolo HTTP. Desvantagens: Dificuldade de encontrar bibliotecas que implementem a especificação para Android (SOAP). Overhead no processamento das mensagens SOAP. 4. Explique quais são as possíveis formas de monetização de aplicações móveis, ressaltando as vantagens e desvantagens de cada uma delas. O candidato deve citar as seguintes formas de monetização para aplicações móveis: Venda direta Neste modelo, o desenvolvedor cobra um valor único pela licença de uso de uma aplicação. Tipicamente isso é feito por meio das lojas virtuais existentes nas principais plataformas (Apple Store, Play Store, Marketplace). O lucro é imediato, mas em geral não duradouro. Usuários também apresentam resistência em comprar algo, sem prévio conhecimento, antes de testá-lo, por exemplo. Pirataria também pode ser considerado um problema. Freemium Neste modular bastante popular, a ideia é distribuir seu aplicativo com a funcionalidade mínima de
graça e cobrar do usuário uma funcionalidade estendida. Um exemplo seria o jogo Candy Crush, onde caso o usuário que um pacote de poderes ou novos recursos, ele é cobrado. O lucro não é imediato, mas a possibilidade de ganhos é alta. Este modelo, junto com propaganda, tem se mostrado o mais lucrativo. Propaganda O uso de propaganda é um forma comum de se obter recursos em aplicações móveis. Em geral, usuários trocam a gratuidade de aplicações por anúncios que são periodicamente apresentados durante o uso da aplicação. Apesar de seu potencial, para maiores receitas é necessário um número razoável de usuários. Como desvantagem adicional, há a insatisfação dos usuários pela publicidade durante uso da aplicação. Venda/Assinatura de Serviços Um quarto modelo é aquele em que a aplicação móvel necessita de recursos remotos que são oferecidos apenas através de uma tarifação (tipicamente uma mensalidade). Há necessidade de manter uma infraestrutura servidora para os serviços.