Baixe o app para aproveitar ainda mais
Prévia do material em texto
DESENVOLVIMENTO PARA DISPOSITIVOS MÓVEIS Diego Bittencourt de Oliveira Introdução ao desenvolvimento para dispositivos móveis Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Identificar os diferentes tipos de dispositivos móveis e sistemas operacionais. � Descrever as principais características de dispositivos móveis e seus sistemas operacionais. � Relacionar os tipos de dispositivos móveis e seus sistemas operacionais com sua posição no mercado. Introdução Os dispositivos móveis fazem parte do nosso dia a dia e os utilizamos cada vez mais como ferramenta, tanto para uso pessoal quanto profissional. Um dispositivo dito móvel possui uma série de peculiaridades que lhe fornecem essa mobilidade e assim o classificam. Um componente de suma importância em dispositivos móveis é o sistema operacional, que é como um cérebro que gerencia o dispositivo, fornecendo, por intermédio deste, as ferramentas que o usuário necessita para o seu dia a dia. Neste capítulo, vamos identificar e descrever as principais carac- terísticas dos dispositivos móveis e seus sistemas operacionais. Além disso, vamos realizar uma análise da posição de mercado de diferentes dispositivos móveis. Dispositivos e sistemas operacionais móveis Segundo Lee, Schneider e Schell (2005), a mobilidade pode ser definida como a capacidade de poder se deslocar ou ser deslocado de forma fácil. Em computação móvel, mobilidade se refere ao uso de dispositivos portáteis que oferecem a capacidade de realizar, com facilidade, um conjunto de funções de aplicação, como conexão, obtenção e fornecimento de dados a outros usuários e uso de aplicações e sistemas. Dessa forma, podemos classificar como dispositivos móveis: � telefones celulares; � laptop; � smartphones; � tablets; � robôs. Tipos de dispositivos móveis Atualmente, dispomos no mercado diversos tipos de dispositivos móveis, tanto para o uso corporativo quando para o uso pessoal de consumidores em geral. As capacidades intrínsecas, a funcionalidade, a portabilidade e o custo de cada um destes variam de forma significativa. Lee, Schneider e Schell (2005) relatam que os smartphones, a evolução dos telefones celulares, são os dispositivos mais populares na contemporaneidade. Os telefones celulares inicialmente contavam com funcionalidades que hoje em dia são consideradas básicas, como a capacidade de realizar ligações telefônicas e enviar mensagens do tipo SMS. Alguns telefones celulares dis- punham de alguns jogos considerados básicos, dada a baixa resolução da tela (128 × 128 pixels). O telefone celular possui display pequeno e botões de discagem, já o smartphone é um pouco maior, possuindo display colorido com excelente resolução e praticamente não tem botões (normalmente os poucos botões existentes se encontram nas partes laterais, para ligar e desligar o aparelho, além de controlar o volume do som). Para digitar um número de telefone ou um texto em um smartphone, um teclado é projetado na tela e, a partir desta tela sensível ao toque (touchscreen), os botões que o usuário está pressionando são identificados pelo aparelho. Introdução ao desenvolvimento para dispositivos móveis2 Os smartphones atuais incorporam mais funcionalidades em relação aos telefones celulares. Na listagem abaixo, podemos observar algumas dessas principais características. � Tela de alta resolução: permite uma experiência de visualização tão boa quanto as encontradas em computadores, que não possuem as limitações que um smartphone possui. Além disso, ainda incorporam as telas touchscreen, que permitem uma excelente usabilidade nos dispositivos, facilitando seu uso. � Conectividade: são várias as possibilidades de conexão, como a rede Wi-Fi e as conexões de telefonia móvel (GSM, 3G, 4G, 5G, bluetooth, entre outras opções). � Capacidade de executar aplicativos: talvez a execução de aplicativos seja uma das mais inovadoras características no smartphone, visto que os telefones celulares traziam aplicativos de fábrica e não ofereciam muitas opções de personalização destes. Nos smartphones, o usuário pode instalar os aplicativos disponíveis nas lojas on-line de aplicativos (o número de aplicativos que o usuário pode instalar irá depender da capacidade de armazenamento de seu dispositivo), o que aumenta as possibilidades de uso para o smartphone. � Câmeras: o conceito de câmera fotográfica foi modificado quando os smartphones passaram a incorporar câmeras, muitos destes dispondo inclusive de flash, além de gravarem vídeos em resolução alta (esta qualidade varia conforme as características dos aparelhos, mas existem smartphones de qualidade superior a equipamentos profissionais). Outro dispositivo bastante popular é o tablet, que pode ser visto como uma evolução do PDA (personal digital assistant, ou assistente pessoal digital). O tablet possui praticamente as mesmas funções que um smartphone, no entanto, sua tela possui dimensões maiores. O tablet pode propiciar uma experiência diferente em relação ao smar- tphone, por exemplo, melhor visualização de conteúdos multimídia como vídeos, filmes, fotos ou até a melhor leitura de um documento. 3Introdução ao desenvolvimento para dispositivos móveis Apesar de o tablet possuir as mesmas funções que um smartphone, este normalmente não realiza ligações telefônicas (o que não é uma regra, visto que alguns tablets possuem essa funcionalidade). No entanto, muitos tablets disponibilizam conexões por rede de celulares utilizando os mesmos chips (SIM cards) que os smartphones utilizam para realizar conexões 3G, 4G, entre outros. Tipos de sistemas operacionais móveis Lee, Schneider e Schell (2005) definem o sistema operacional móvel como o cérebro que controla o dispositivo, disponibilizando funcionalidades para o usuário que vão além de suas próprias. A seguir, destacamos os quatro sistemas operacionais mais relevantes. � Android: desenvolvido pela Google, utilizado por diversos fabricantes. � iOS: criado pela Apple, exclusivo para os seus dispositivos. � Symbian OS: desenvolvido pela Nokia e utilizado por diversos fabri- cantes, mas foi descontinuado. � Windows Phone: criado pela Microsoft, chegou a ser muito utilizado, mas não resistiu à concorrência e recentemente foi descontinuado. O Windows Phone e o Symbian OS, conforme mencionado, não são mais desenvolvidos, mas desempenharam papéis importantes no desenvolvimento de sistemas operacionais. Diversos fabricantes utilizaram o Symbian OS em seus dispositivos e este foi, por determinado período, o sistema operacional móvel mais utilizado do mundo. O Windows Phone chegou a fazer frente com o Android e o iOS, mas não suportou a grande concorrência destes. O iOS é desenvolvido pela Apple para uso exclusivo nos seus produtos, portanto é um software de desenvolvimento fechado, ou seja, não permite alterações internas do sistema, exceto as opções presentes nas configurações. Por outro lado, oferece uma experiência mais estável e segura ao usuário, visto que este é projetado para atender apenas os dispositivos desenvolvidos pela própria marca. Introdução ao desenvolvimento para dispositivos móveis4 O Android possui código totalmente aberto, sendo disponível a qual- quer fabricante que deseje utilizá-lo em seus dispositivos, o que causou um grande sucesso, tornando-se um dos sistemas operacionais mais utilizados na atualidade. Principais características dos dispositivos móveis e seus sistemas operacionais Características dos dispositivos móveis Deitel, Deitel e Deitel (2015) elencam duas características como as principais em dispositivos móveis. A primeira é a portabilidade, que corresponde à capacidade de ser facilmente transportado, sendo que, na atualidade, um dispositivo deve ser capaz de ser carregado nas mãos para ser considerado portátil. A segunda característica é a usabilidade, que indica a capacidade de ser utilizado por diversos usuários, emdiversos ambientes. A usabilidade de um dispositivo depende de vários fatores, como características do usuário; características do ambiente e características do dispositivo. A interação do usuário com um dispositivo móvel possui certo nível de dependência de suas características pessoais. Segundo Lee, Schneider e Schell (2005), as características mais comuns do usuário são: � Tamanho e força: características que possuem um efeito sobre a inte- ração do usuário com o dispositivo móvel. Por exemplo, um notebook que é facilmente transportado por um adulto pode não ser considerado utilizável para seu filho. � Flexibilidade e destreza: causam efeito na usabilidade do dispositivo móvel, em situações em que um usuário adulto tenha dedos maiores e precise usar um teclado maior. Por exemplo, um bombeiro que usa luvas grossas e precisa acessar informações sobre a planta de um prédio com um tablet pode encontrar dificuldades e classificar o dispositivo como inútil. � Conhecimento e capacidade: usualmente, os dispositivos mais úteis são os mais simples e intuitivos de se utilizar. Caso o dispositivo seja difícil de se utilizar, o usuário não o considerará útil. 5Introdução ao desenvolvimento para dispositivos móveis O ambiente em que o usuário opera o dispositivo afeta o tipo a ser utilizado, sendo que algumas condições em relação ao ambiente devem ser levadas em conta. � Condições normais de funcionamento: um dispositivo móvel deve trabalhar sob as condições normais de trabalho do usuário. Um exemplo seria um usuário que trabalha em pé durante períodos prolongados de tempo. Neste caso, um tablet pode ser mais adequado que um notebook, já que o dispositivo não precisa ficar na posição horizontal. � Condições extremas: por exemplo, um funcionário de serviços de emergência, como um bombeiro trabalhando em um ambiente arriscado, pode necessitar de um dispositivo móvel à prova d'água ou outro mais resistente, que possa suportar as condições do ambiente. Os dispositivos móveis têm características próprias que podem afetar sua usabilidade total. Algumas dessas características, indicadas por Lee, Schneider e Schell (2005) são: � Tempo de inicialização: em uma situação de tempo crítico (funcionário de serviços de emergência) um dispositivo móvel que inicia de forma instantânea é o mais adequado. � Integridade de dados: a falta de tolerância à perda de dados torna necessário o armazenamento permanente no próprio dispositivo. Assim, um suporte para cartão de memória ou uma memória interna ampla se tornam necessários. � Interface com o usuário (teclado, mouse, tela sensível ao toque): a interface pode dificultar a execução de determinadas tarefas. Um exemplo é a falta de agilidade para se desenhar utilizando um mouse, sendo que é possível desenhar com muito mais agilidade ao se utilizar uma caneta em um tablet ou os próprios dedos na tela sensível ao toque. � Robustez/resistência: a fragilidade é muito comum em dispositivos móveis, que podem quebrar se forem derrubados. Alguns são projetados para serem mais resistentes, porém, tornar um dispositivo mais robusto pode afetar sua portabilidade e usabilidade. Introdução ao desenvolvimento para dispositivos móveis6 Características dos sistemas operacionais O Android, foco de nosso estudo, é um sistema operacional de código aberto (SIMON, 2011), o que significa que qualquer desenvolvedor pode acessar o código-fonte do sistema e verificar como cada recurso é desenvolvido. Além disso, conforme mencionado anteriormente, qualquer fabricante pode utilizar o Android e realizar as modificações que desejar para que este seja utilizado em seus dispositivos. Outra característica de destaque do sistema Android é a fragmentação. No Quadro 1, podemos observar as versões do Android e o percentual que cada uma possui do total de dispositivos. Isso pode ser considerado um problema, visto que o desenvolvedor pode ter que projetar aplicativos para serem exe- cutados em várias versões do sistema operacional ou limitar para uma versão específica e, com isso, acabar perdendo usuários em potencial. Fonte: Adaptado de Painéis… (2019). Versão Código API Distribuição 2.3.3 – 2.3.7 Gingerbread 10 0,3% 4.0.3 – 4.0.4 Ice Cream Sandwich 15 0,3% 4.1.x 4.2.x 4.3 Jelly Bean 16 17 18 1,2% 1,5% 0,5% 4.4 KitKat 19 6,9% 5.0 5.1 Lollipop 21 22 3,0% 11,5% 6.0 Marshmallow 23 16,9% 7.0 7.1 Nougat 24 25 11,4% 7,8% 8.0 8.1 Oreo 26 27 12,9% 15,4% 9 Pie 28 10,4% Quadro 1. Versões da API do Android e percentual de utilização da versão do Android 7Introdução ao desenvolvimento para dispositivos móveis Deitel, Deitel e Wald (2016) relatam que, apesar de dificultosa para os desenvolvedores, a fragmentação traz muitos benefícios para o usuário. Um exemplo é o caso do iOS, concorrente do Android que possui baixa fragmen- tação. Dessa forma, os dispositivos que utilizam o iOS recebem atualizações para a grande maioria de dispositivos executar uma versão atualizada do sistema operacional. Apesar de isso parecer benéfico para o usuário, que sempre irá possuir a versão atualizada do sistema e todos seus novos recursos, há outro lado não tão conveniente. Um dispositivo iOS de quatro anos de idade tende a se tornar mais lento ao ser atualizado para a versão mais recente do sistema operacional, visto que o sistema operacional evoluiu mas o hardware do dispositivo continua o mesmo. Logo, para se manter atualizado, aqueles que utilizam o sistema iOS deverão adquirir um novo dispositivo para usufruir de uma boa experiência de usuário. Os dispositivos Android sofrem menos com esse tipo de situação pois, dada sua grande fragmentação, estes tendem a receber mais atualizações de segurança e novos recursos mais pontuais para o seu dispositivo, o que em geral não prejudica sua performance. Dessa forma, o dispositivo tem maior durabilidade, sem haver necessidade de se comprar um dispositivo com maior capacidade de recursos (consequentemente mais caro) para rodar as versões mais recentes do Android, exceto em casos em que o usuário necessite de certos recursos. Por exemplo, caso um aplicativo necessário para o usuário apresente um determinado recurso, a aquisição de um novo dispositivo seria justificável por se tratar de uma situação em que não existe uma atualização disponível ou um recurso não está presente em seu dispositivo. No link a seguir, podemos encontrar diversas informações sobre as versões do Android que podem ajudar o desenvolvedor na definição de versões e APIs para o seu projeto. https://qrgo.page.link/5nRFL No Quadro 2, podemos observar as diversas APIs (Application Program- ming Interfaces) do Android. Ao iniciar um projeto de um aplicativo para dispositivo móvel, o desenvolvedor deve estar atento à questão da escolha da API mínima de seu projeto, pois esta irá influenciar no direcionamento Introdução ao desenvolvimento para dispositivos móveis8 do público em potencial do aplicativo. Por exemplo, ao definir como API mínima a versão 23 (Android versão 6.0 Marshmallow), o desenvolvedor irá perder cerca de 25% do total de usuários possíveis para o seu aplicativo. Sendo assim, o desenvolvedor deve planejar quais recursos serão necessários para seu aplicativo, devendo escolher uma API mínima adequada que não o limite, mas que, de maneira equilibrada, não o faça perder o público-alvo. Posições de mercado Nesta seção, conheceremos os dados de mercado relacionados aos dispositivos móveis e aos seus sistemas operacionais. Vale ressaltar que ambos os mercados são extremamente competitivos, tanto pelo fato de o mercado móvel ser uma tendência mundial, quanto pelo fato de que há concorrência ferrenha entre as empresas fabricantes e desenvolvedoras. O mercado de dispositivos móveis vem crescendo a cada ano. Na Figura 1, é possível identificar essa tendência, observando que em 2018, em comparação ao ano de 2014, houve um aumento de quase 23% na participação de smartphones em transações devendas. Os tablets vêm oscilando e perdendo um pouco de mercado e as vendas de dispositivos desktop recuaram em quase 21%. Figura 1. Comparação da utilização em compras de dispositivos móveis (smartphones e tablets) vs. desktop. Fonte: Desktop... (2019, documento on-line). 9Introdução ao desenvolvimento para dispositivos móveis Essa informação corrobora com a afirmativa de que os usuários estão cada vez mais preferindo os dispositivos móveis aos dispositivos não móveis, como é o caso dos computadores do tipo desktop. Na Figura 2, podemos observar uma estatística um pouco diferente, relacionada à fatia do total de vendas de dispositivos móveis que cada fabricante obteve em 2018. É possível observar que o mercado de dispositivos móveis é praticamente dominado pelas marcas Samsung e Apple. Figura 2. Comparação das vendas de dispositivos móveis (smartphones e tablets) pelos fabricantes em 2018. Fonte: Mobile... (2019a). Mudando o foco dos dispositivos móveis para os sistemas operacionais, conforme a Figura 3 ilustra, o sistema operacional Android praticamente domina o mercado, visto que mais de 72% dos dispositivos móveis comercia- lizados possuem este sistema operacional contra quase 24% de seu principal e praticamente único concorrente, sendo que os demais sistemas operacionais não chegam a somar 4% do total. Introdução ao desenvolvimento para dispositivos móveis10 Figura 3. Comparação das vendas de dispositivos móveis/sistemas operacionais. Fonte:. Mobile... (2019b, documento on-line). Segundo Deitel, Deitel e Deitel (2015), as oportunidades para os desen- volvedores de aplicativos Android são imensuráveis. A grande competição entre os fabricantes de dispositivos móveis populares e as grandes empresas de telefonia móvel estão levando o mercado a uma rápida inovação e à queda nos preços. A concorrência entre as dezenas de fabricantes de dispositivos Android impulsiona a inovação de hardware e software dentro desta comu- nidade. Tal fato permite que o desenvolvedor Android conceba aplicações cada vez mais avançadas e inovadoras, proporcionando a criação de múltiplas oportunidades neste mercado. No portal StatCounter você pode obter diferentes estatísticas, como as citadas neste capítulo. Tais estatísticas podem ajudar na tomada de decisões em relação a vários aspectos de um projeto de aplicativo, como a plataforma de desenvolvimento, a versão de API mínima para o projeto, já que é possível obter dados atualizados da fragmentação dos dispositivos Android, entre outros. https://qrgo.page.link/fRMmc 11Introdução ao desenvolvimento para dispositivos móveis DEITEL, P.; DEITEL, H.; DEITEL, A. Android: como programar. 2. ed. Porto Alegre: Book- man, 2015. 690 p. DEITEL, P.; DEITEL, H.; WALD, A. Android 6 para programadores: uma abordagem baseada em aplicativos. 3. ed. Porto Alegre: Bookman, 2016. 618 p. DESKTOP vs Mobile vs Tablet Market Share Worldwide. StatCounter, Dublin, 2019. Dis- ponível em: http://gs.statcounter.com/platform-market-share/desktop-mobile-tablet/ worldwide. Acesso em: 29 maio 2019. LEE, V.; SCHNEIDER, H.; SCHELL, R. Aplicações móveis: arquitetura, projeto e desenvolvi- mento. São Paulo: Pearson; Makron Books, 2005. 328 p. MOBILE & Tablet Operating System Market Share Worldwide. StatCounter, Dublin, 2019a. Disponível em: http://gs.statcounter.com/os-market-share/mobile-tablet/ worldwide/#monthly-201801-201812-bar. Acesso em: 29 maio 2019. MOBILE Vendor Market Share Worldwide. StatCounter, Dublin, 2019b. Disponível em: http://gs.statcounter.com/platform-market-share/desktop-mobile-tablet/worldwide. Acesso em: 29 maio 2019. PAINÉIS | Android Developers. Android Open Source Project, [S. l.], 2019. Disponível em: https://developer.android.com/about/dashboards/?hl=pt-br. Acesso em: 29 maio 2019. SIMON, J. Head first Android development. Sebastopol: O’Reilly, 2011. 608 p. Introdução ao desenvolvimento para dispositivos móveis12 DESENVOLVIMENTO PARA DISPOSITIVOS MÓVEIS Diego Bittencourt de Oliveira Plataformas de desenvolvimento: IDE e emulador Android Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Identificar as plataformas de desenvolvimento e emuladores da Android. � Descrever as principais características das IDEs atuais e de emuladores. � Relacionar as principais características entre as plataformas de desen- volvimento e seus emuladores. Introdução Neste capítulo, você irá conhecer as principais ferramentas de desenvolvi- mento de aplicativos para a plataforma Android. Tais ferramentas são capazes de fornecer ao desenvolvedor de aplicativos os recursos necessários para aplicar as funções existentes em um dispositivo móvel, de modo a construir uma aplicação robusta e funcional aos objetivos propostos para esta. Além disso, você verá as principais características destas ferramentas e aprenderá sobre a IDE da Android (Android Studio) para o desenvolvi- mento de seus aplicativos , sendo esta a ferramenta indicada pela própria plataforma como a mais adequada para desenvolvê-los. Você também conhecerá as principais funcionalidades dos emulado- res da plataforma Android, que auxiliam o profissional desenvolvedor a testar e a detectar falhas em seus projetos, além de identificar até que ponto estes emuladores conseguem substituir dispositivos reais nos testes de um aplicativo em desenvolvimento. Ainda neste capítulo, iremos relacionar algumas características do Android Studio com o emulador padrão da plataforma Android, iden- tificando seus recursos e como estes auxiliam no desenvolvimento de um aplicativo livre de falhas. Plataformas de desenvolvimento e emuladores da Android IDE, do inglês integrated development environment, ou ambiente de desen- volvimento integrado, é um software voltado para o desenvolvimento de programas ou aplicativos. O desenvolvedor encontra nos IDEs todas as fun- ções necessárias para o desenvolvimento, desde programas de computador a aplicativos mobile, assim como recursos que possibilitam a criação de códigos com uma incidência menor de erros. No passado, os desenvolvedores necessitavam apenas de um editor de texto e um navegador para criar um software. Agora, com os IDEs, uma série de novas opções para otimizar o tempo gasto com códigos foi disponibilizada. Atualmente, os IDEs contam, inclusive, com emuladores capazes de criar ambientes para a realização de testes nos aplicativos desenvolvidos. Assim, é possível realizar modificações no código-fonte e, com poucos cliques, verificar seu funcionamento em um ambiente simulado, ajudando o desenvolvedor a encontrar possíveis falhas de forma mais ágil. Visando popularizar sua plataforma entre os desenvolvedores, a Android disponibiliza um SDK (software development kit) de forma gratuita. Neste SDK, encontramos ferramentas multiplataforma, como o Android Studio e o emulador do ambiente Android. IDEs de desenvolvimento Android Atualmente, a Android possui diversos IDEs voltados para o desenvolvimento de aplicativos para sua plataforma. O IDE de maior destaque e o mais indicado para o desenvolvimento na plataforma, pela própria Android, é o Android Studio. No entanto, podemos destacar outros IDEs, como os listados a seguir. � Eclipse: foi o primeiro IDE a propiciar o desenvolvimento Android, sendo originalmente criado para ser um IDE para várias linguagens de programação, como PHP, C++ e Java. A Android, por precisar de um IDE para desenvolver aplicativos para a sua plataforma, criou o plugin ADT (Android development tools), que possibilitou o desenvolvimento Android neste IDE. Plataformas de desenvolvimento: IDE e emulador Android2 � NetBeans IDE: este IDE se caracteriza pela capacidade de desenvol- ver aplicativos para desktop, dispositivos móveis e Web como Java, JavaScript, HTML5, PHP, C / C ++ e diversas outras linguagens de maneira rápida e fácil. Assim como o Eclipse, utiliza o plugin ADT para desenvolver aplicativos para Android.� Visual Studio: utilizando o SDK Xamarin.Android, é possível desen- volver aplicativos para Android com a linguagem C#. Outra curiosi- dade é que um aplicativo desenvolvido neste IDE pode ser facilmente modificado para funcionar em dispositivos que utilizam o sistema operacional iOS. � RAD Studio: este IDE de desenvolvimento utiliza a linguagem Delphi ou C++, que possibilita a criação de aplicativos para várias plataformas além da Android, como Windows Phone e iOS, sendo capaz de rodar esse aplicativo em qualquer um destes sistemas operacionais, sem a necessidade de qualquer modificação no código. O Android Studio, conforme já mencionado, é o IDE indicado e desen- volvido pela própria Android. Foi lançado em 2013, tendo como base o IDE JetBrains Intellij IDEA, sendo este desenvolvido para a confecção de aplicativos em linguagem Java, o que não é uma coincidência, visto que a Android trabalha com esta linguagem de programação de forma nativa no desenvolvimento de seus aplicativos. A Figura 1 ilustra a visão geral do Android Studio e podemos observar, nos itens a seguir, a interface de vários recursos disponíveis nesta ferramenta. 1. Barra de ferramentas. 2. Barra de navegação. Ajuda na navegação pela estrutura de pastas do projeto. 3. Janela do editor de código-fonte, espaço onde o código-fonte é editado, sendo que esta janela pode se modificar, dependendo do código editado. 4. Barra de janela de ferramentas, onde estão localizados botões para expandir ou ferramentas secundárias. 5. Janela de ferramentas, com o gerenciamento dos projetos, tarefas per- sonalizadas, controle de versão, entre outros. 6. Barra de status, que disponibiliza o status do projeto, do IDE, mensagens e advertências. 3Plataformas de desenvolvimento: IDE e emulador Android Figura 1. Visão geral da interface do Android Studio. Fonte: Android Developers (2019a, documento on-line). É possível encontrar mais informações sobre a versão atual do Android Studio, além de opções para realizar o download e executar a instalação da ferramenta, no link a seguir. https://qrgo.page.link/Q9CHk Emuladores do Android Deitel, Deitel e Deitel (2015) define um emulador como um software executado em uma plataforma (por exemplo, Windows, MAC OS X ou Linux), sendo que este deve disponibilizar um ambiente emulado do sistema desejado. Dessa forma, é possível executar as opções deste ambiente, como um aplicativo, e utilizá-lo para verificar seu funcionamento, como uma espécie de ambiente para testes. Plataformas de desenvolvimento: IDE e emulador Android4 No intuito de acelerar o processo de desenvolvimento de um aplicativo Android, a plataforma disponibiliza um emulador multiplataforma em seu SDK, chamado Android Emulator. Por meio deste emulador é exibida uma janela com uma interface realista da Android, conforme observamos na Figura 2. Figura 2. Visão geral da interface Android Emulator. Fonte: Android Developers (2019b, documento on-line). Ao criar um AVD (Android virtual device, ou dispositivo Android virtual) no Android Emulator, é possível definir todas as características e recursos de um dispositivo tal qual o dispositivo real. 5Plataformas de desenvolvimento: IDE e emulador Android Um AVD consiste em uma configuração na qual as características do dispositivo a ser emu- lado serão definidas. O AVD possui uma série de configurações que permitem uma grande gama de simulações. No link a seguir você pode aprender a realizar estas configurações. https://qrgo.page.link/AknJ1 Outros emuladores da Android estão disponíveis no mercado. Destacamos alguns a seguir. � BlueStacks: emulador Android que permite que o uso de aplicativos Android em um computador, tanto Windows como Mac. � Android x86: avançado emulador Android, muito utilizado para jogos e popular entre os desenvolvedores, já que os jogos para Android são executados em computadores sem apresentar quaisquer problemas. � GenyMotion: muito utilizado por desenvolvedores, este emulador An- droid é executado por intermédio do Virtual Box (software de virtu- alização de sistemas operacionais). Oferece um bom desempenho no uso de aplicativos e jogos, oferecendo várias opções de personalização das configurações do emulador. Você pode encontrar mais informações sobre os emuladores alternativos da Android nos links a seguir. � BlueStacks: https://qrgo.page.link/mZ4Z6 � Android x86: https://qrgo.page.link/sisd7 � GenyMotion: https://qrgo.page.link/XFEsw Plataformas de desenvolvimento: IDE e emulador Android6 Características dos IDEs atuais e emuladores Android Segundo Simon (2011), o SDK da Android é projetado para permitir que se trabalhe com várias versões da plataforma no mesmo desenvolvimento. Para manter os downloads pequenos, a versão do SDK pacotes é separada do SDK. Isso também permite atualizar para novas versões da Android sem ter que baixar o SDK novamente, que pode atingir até mais de 30GB se baixado por completo. Para uma boa experiência com o Android Studio, você deve estar atento aos reque- rimentos mínimos de sistema. No caso da plataforma Windows, os requisitos são os listados abaixo. � Microsoft Windows 7/8/10 32 ou 64 bits. � 3 GB de memória RAM mínima ou 8 GB de memória RAM recomendado. � 2 GB de espaço mínimo disponível em disco ou 4GB de espaço disponível em disco recomendados. � Resolução mínima da tela de 1280 × 800 pixels. A maioria dos IDEs no mercado atual utiliza o SDK da Android como base para suas aplicações, fornecendo uma ferramenta de criação, gerencia- mento e depuração do projeto com base nas funcionalidades fornecidas pelo SDK. O Eclipse e o Netbeans são exemplos de IDEs que utilizam o SDK da Android como base, integrando-o ao plugin ADT (Android development tools). Logo, não existe uma diferença clara sobre qual dos dois IDEs seria o mais indicado, pois esta é uma questão relacionada ao desenvolvedor. Por exemplo, um desenvolvedor com experiência em aplicativos Java, utilizando o Netbeans, teria uma curva de aprendizado bem menor ao utilizá-lo para desenvolver aplicativos para a Android, visto que já possui experiência com IDEs e conhece suas funcionalidades. 7Plataformas de desenvolvimento: IDE e emulador Android No caso de IDEs como o Visual Studio e o RAD Studio, essa depen- dência do desenvolvedor vai ainda mais longe. C# e Delphi, linguagens de programação dos IDEs citados, possuem muitos desenvolvedores no mercado. Dessa forma, estas linguagens visam possibilitar aos desenvolvedores, que até então basicamente desenvolviam aplicativos para a plataforma Windows (Windows Desktop, Windows Phone e Web, no caso do Visual Studio), a desenvolver aplicativos para Android, utilizando linguagens de programação nas quais os já possuem experiência. A principal características destes IDEs é a capacidade de criar um projeto Android em suas linguagens nativas (C# ou Delphi) e criar aplicativos Android baseados em Java (ou seja, transformam o código-nativo em Java para, então, o SDK da Android gerar um aplicativo compatível com a plataforma). Este fato pode ser facilmente comprovado, visto que o gerenciador do SDK padrão da Android se encontra disponível nestas ferramentas. A Figura 3 ilustra o aplicativo padrão de gerenciamento das bibliotecas disponíveis no SDK da plataforma. Figura 3. Gerenciador do SDK Android e AVD. Plataformas de desenvolvimento: IDE e emulador Android8 Segundo Deitel, Deitel e Wald (2016), o Android Studio, na condição de IDE mais indicado pela plataforma para o desenvolvimento de seus aplicativos, possui características muitos similares às de outros IDEs, visto que o próprio Android Studio é baseado em um IDE desenvolvido para Java (IDE JetBrains Intellij IDEA, conforme mencionado). No entanto, o Android Studio possui características inseridas pela equipe Android que o tornam uma ferramenta muito completa para a plataforma. Algumas características estão listadas a seguir. � Gradle: ferramenta de automatização doprocesso de compilação do aplicativo. � Layout: a interface do IDE permite arrastar componentes para formar o layout do aplicativo e editar o código-fonte gerado pela interface. Além disso, permite simular o comportamento do layout criado nos diversos tamanhos e formatos de displays encontrados nos dispositivos disponíveis do mercado. � Renderização dos layouts: função de renderização inteligente de layout na qual os erros de layout são identificados e sugestões de solução são disponibilizadas ao desenvolvedor. � Análise do código: similar a renderização de layouts, a análise de código verifica o código-fonte do aplicativo, linha a linha, sugerindo correções ao desenvolvedor. � Repositórios de versionamento: possui integração com os principais repositórios de versionamento do mercado, o que possibilita o trabalho em conjunto entre grandes equipes de desenvolvimento, trabalhando simultaneamente em um único projeto. � Plugins: apesar de ser uma característica muito comum nos IDEs, o suporte de plugins do Android Studio é muito potente, visto que até mesmo o emulador nativo do SDK pode ser substituído pelo uso de plugins. O Gradle é um importante conjunto de ferramentas que automatiza e ge- rencia o processo de compilação de um aplicativo Android, funcionando como uma espécie de caixa de ferramentas da compilação na qual são fornecidos processos e configurações específicos para compilar e testar um aplicativo Android. Vale observar que o Gradle funciona de forma independente do An- droid Studio, ou seja, é possível compilar os aplicativos via linha de comando em um computador em que o Android Studio não esteja instalado. 9Plataformas de desenvolvimento: IDE e emulador Android Você pode encontrar mais informações sobre o Gradle em sua página oficial e verificar as informações na página sobre Android, que aborda o processo de compilação de aplicativos. https://qrgo.page.link/Uvo8Z O emulador disponível no SDK da Android é o mais completo, pois possui diversas imagens de todas as versões do sistema operacional Android, sendo que por seu AVD é possível criar dispositivos com as mais variadas caracte- rísticas e dos mais variados tipos: � smartphones; � tablets; � relógios inteligentes (dispositivo Wear OS); � Android TV (sistema operacional Android direcionado a televisores smart). Dentre as características que podemos definir para um dispositivo pelo AVD, se destaca a possibilidade de personalização do hardware. Abaixo, temos algumas das personalizações possíveis: � poder de processamento; � quantidade de memória RAM; � dimensões e resolução do display; � botões e tipos de teclado disponíveis; � sensores (GPS, sensor de proximidade, giroscópios, acelerômetros, entre outros); � câmeras. Plataformas de desenvolvimento: IDE e emulador Android10 Neste emulador também podemos simular diferentes operações como uma ligação telefônica sendo recebida, um SMS sendo recebido, níveis de bateria e localizações do GPS. Dessa forma, é possível realizar simulações de operações que um aplicativo executa em seu uso real e analisar se o comportamento realizado é o comportamento esperado. Por exemplo, quando um smartphone recebe uma ligação telefônica, a prioridade é que esta ligação seja atendida e que nenhum aplicativo se imponha sobre ela. Outro exemplo de simulação seria um usuário em meio a uma ligação telefônica que recebe uma segunda chamada de um aplicativo de comunicação como o Skype. Nesse caso, o ideal é que o Skype identifique que o usuário está ocupado e que no momento não pode atender, não gerando alertas que possam interferir na ligação corrente. Todas essas simulações e inúmeras outras podem ser realizadas pelo emu- lador do SDK da Android, porém muitos desenvolvedores relatam dificuldades ao simularem aplicativos mais complexos neste emulador. Para suprir estes casos, muitos desenvolvedores utilizam emuladores de outros fornecedores como o Genymotion, um emulador muito potente que roda em um navegador e, inclusive, possui um plugin que o integra ao Android Studio. No entanto, esta é uma ferramenta paga, o que acaba afastando alguns desenvolvedores que preferem utilizar outras técnicas gratuitas para solucionar suas dificuldades. Muitas vezes, configurar o dispositivo físico para trabalhar de forma integrada ao Android Studio pode ser um processo complexo que desmotiva o desenvolvedor. No link a seguir podemos encontrar diversas informações sobre a configuração deste recurso. https://qrgo.page.link/1BksV Uma técnica possível seria a utilização de dispositivos reais para realizar as simulações e a depuração dos aplicativos, sendo que pelo SDK da Android podemos utilizar um celular comum, como um dispositivo integrado ao IDE, no qual o aplicativo é instalado e iniciado de forma automatizada, tal qual um AVD. Essa técnica necessita de um dispositivo físico e é, inclusive, uma técnica muito recomendada, considerando que o emulador não é um dispositivo real, por mais que forneça recursos. No dispositivo real, o aplicativo pode apresentar comportamentos indesejáveis que não são detectáveis em simulações. 11Plataformas de desenvolvimento: IDE e emulador Android Características das plataformas de desenvolvimento e os seus emuladores A capacidade de realizar diversas simulações pela plataforma integrada ao emulador ou dispositivo de teste é uma ferramenta muito potente que o de- senvolvedor tem em suas mãos para auxiliá-lo na detecção de problemas. Os problemas citados podem ser relacionados a uma lógica de programa não desenvolvida de forma adequada pelo desenvolvedor ou, até mesmo, um problema relacionado a uma incompatibilidade no sistema operacional. Em um ambiente móvel, erros podem custar muito caro e trazer muitas inconveniências. Um exemplo é a energia elétrica, considerando que a empresa fornecedora se desloca todos os meses até a residência do cliente para coletar seu consumo de energia. Em diversos casos, o cliente pode residir em locais distantes ou de difícil acesso e, portanto, essa coleta pode gerar um custo alto. Na situação em que essa coleta é realizada com o auxílio de um dispositivo móvel, a ocorrência de uma falha ao coletar essas informações pode gerar prejuízo ao funcionário, que deverá retornar à empresa com o dispositivo para que este seja verificado e, então, retornar à residência do cliente e realizar a coleta de dados. Na Figura 4 é possível observar um exemplo da capacidade do Android Studio de realizar análises durante as simulações com o aplicativo, sendo que esta figura ilustra a técnica de break point (ponto de interrupção). Nesta técnica, o programa é executado normalmente e pausa a sua execução assim que encontrar um ponto de interrupção. A partir deste momento, é possível visualizar dados avançados do código-fonte, com os valores atuais de cada variável declarada no aplicativo. Isto serve para averiguar se o comportamento do software até esse ponto foi correto, ou executar o código-fonte linha a linha, a partir deste momento, para analisar se o aplicativo apresentará o comportamento esperado. Neste recurso, o Android Studio é capaz de realizar a análise linha a linha durante a execução de um aplicativo em um dispositivo real integrado ao IDE, o que o torna ainda mais potente, visto que realizar testes reais de um aplicativo já é vantajoso, porém a capacidade de analisar o código em execução no dispositivo em tempo real é um recurso muito precioso. Plataformas de desenvolvimento: IDE e emulador Android12 Figura 4. Exemplo de ponto de interrupção no código-fonte do aplicativo e visualização do conteúdo das variáveis. Fonte: Android Developers (2019c, documento on-line). Segundo Lee, Schneider e Schell (2005), em dispositivos móveis os recursos costumam ser limitados, alguns destes chegando a estados críticos. Observe a seguir. � Processamento: processadores de outros dispositivos são componentes que costumam gerar calor. Em dispositivos móveis,estes componentes possuem boa capacidade de processamento compatível com o dispositivo em questão, porém a emissão de calor pode ser indesejada pelo usuário, logo seu processamento em alta performance deve ser controlado. � Memória RAM: podemos encontrar dispositivos no mercado atual com 8GB de memória, mas em muitos casos não nos depararemos com uma quantidade de recursos de memória tão flexíveis assim. A utilização de memória do aplicativo deve ser controlada, visto que outros aplicativos que convivem no mesmo ambiente também utilizam este recurso. � Bateria: talvez o recurso mais crítico em um dispositivo móvel, conside- rando que, uma vez consumida a bateria, o dispositivo não pode ser mais operado. O uso consciente do processamento e dos recursos de memória RAM influencia diretamente na quantidade de bateria consumida. 13Plataformas de desenvolvimento: IDE e emulador Android Acima, podemos verificar a importância dos recursos indicados para compreendermos a importância do monitor de recursos do Android Studio, ilustrado na Figura 5. Por meio deste é possível analisar o uso de memória RAM e o uso de processamento do dispositivo móvel enquanto o aplicativo desenvolvido é executado. Este monitor de recursos se torna ainda mais potente aliado ao recurso de break point descrito anteriormente, no qual ao executar o aplicativo linha a linha podemos observar a evolução do uso de recursos. É possível realizar ajustes no aplicativo para que este apresente um funcio- namento adequado ao ambiente em que está sendo executado; por exemplo, não consumindo muitos recursos, ou em casos específicos em que consome os recursos necessários, apenas pelo período de tempo necessário à função executada, liberando-os em seguida, visando preservar seu bom funcionamento em um ambiente com diversos outros aplicativos sendo executados de forma concorrente. Figura 5. Exemplo de monitoração dos recursos em uso do AVD. Fonte: Android Developers (2019c, documento on-line). Muitos dos erros de um aplicativo são complexos de se identificar, sendo necessárias técnicas de análise de aplicativo durante seu funcionamento para identificar certos comportamentos. O link a seguir fornece informações sobre estas técnicas de depuração no IDE Android Studio. https://qrgo.page.link/3ibdE Plataformas de desenvolvimento: IDE e emulador Android14 ANDROID DEVELOPERS. Conheça o Android Studio. 2019a. Disponível em: https://deve- loper.android.com/studio/intro?hl=pt-br. Acesso em: 1 jun. 2019. ANDROID DEVELOPERS. Depure seu aplicativo. 2019c. Disponível em: https://developer. android.com/studio/run/emulator.html. Acesso em: 1 jun. 2019. ANDROID DEVELOPERS. Executar aplicativos no Android Emulator. 2019b. Disponível em: https://developer.android.com/studio/run/emulator.html. Acesso em: 1 jun. 2019. DEITEL, P.; DEITEL, H.; WALD, A. Android 6 para programadores: uma abordagem baseada em aplicativos. 3. ed. Porto Alegre: Bookman, 2016. DEITEL, P.; DEITEL, H.; DEITEL, A. Android: como programar. 2. ed. Porto Alegre: Book- man, 2015. LEE, V.; SCHNEIDER, H.; SCHELL, R. Aplicações móveis: arquitetura, projeto e desenvol- vimento. São Paulo: Person, 2005. SIMON, J. Head first android development. Farnham: O’Reilly, 2011. Leituras recomendadas ANDROID DEVELOPERS. Configurar sua compilação. 2019. Disponível em: https://deve- loper.android.com/studio/build. Acesso em: 1 jun. 2019. ANDROID DEVELOPERS. Criar e gerenciar dispositivos virtuais. 2019. Disponível em: ht- tps://developer.android.com/studio/run/managing-avds.html. Acesso em: 1 jun. 2019. ANDROID DEVELOPERS. Executar aplicativos em um dispositivo de hardware. 2019. Dis- ponível em: https://developer.android.com/studio/run/device?hl=pt-br. Acesso em: 1 jun. 2019. ANDROID DEVELOPERS. [Site]. 2019. Disponível em: https://developer.android.com/ studio. Acesso em: 1 jun. 2019. 15Plataformas de desenvolvimento: IDE e emulador Android DESENVOLVIMENTO PARA DISPOSITIVOS MÓVEIS Diego Bittencourt de Oliveira Linguagem Java: conceitos essenciais Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Descrever as características da linguagem Java, como suas classes e tipos de dados. � Identificar os principais conceitos de programação orientada a objetos com Java. � Operacionalizar a utilização do Java como linguagem base para o desenvolvimento de aplicações Android. Introdução Neste capítulo você conhecerá a linguagem de programação Java, que é a linguagem de programação nativa da plataforma Android. Por ser muito popular, esta linguagem foi a escolha mais adequada como lin- guagem de programação padrão da plataforma. Isso se deve ao fato de existirem muitos desenvolvedores experientes nesta linguagem. Assim, a plataforma já inicia com milhões de desenvolvedores especializados em sua linguagem de programação base. O Java também é uma linguagem de programação potente, sendo totalmente orientada a objetos, além de possuir uma enorme biblioteca de classes muito sólida e atualizada de forma regular. No decorrer deste capítulo, conheceremos melhor as características das classes Java, bem como os tipos de dados que a linguagem de programação disponibiliza para o seu desenvolvedor. Veremos, também, os conceitos de programação orientada a objetos com Java e aprenderemos, ainda, a utilizar Java como linguagem padrão para o desenvolvimento de aplicações para Android. Linguagem Java: classes e tipos de dados Segundo Deitel, Deitel e Deitel (2015), a linguagem Java para aplicativos Android é semelhante e, ao mesmo tempo, muito diferente de outras aplicações desenvolvidas nesta linguagem. Um desenvolvedor com experiência em Java terá facilidade em desenvolver aplicativos para Android, mas compreenderá a diferença mencionada. Já um desenvolvedor com pouca experiência nesta linguagem deve buscar se familiarizar. Como já mencionado, Java é uma linguagem de programação orientada a objetos, ou seja, baseada na modelagem de objetos e na comunicação que estes possuem entre si. Em uma situação de analogia a um objeto real, pode-se definir o objeto caneca, algumas de suas propriedades seriam a cor, a capacidade máxima e a quantidade de café que possui. Em uma linguagem orientada a objetos, podemos definir objetos canecas e acessar suas propriedades. Poderíamos também enviar mensagens para os objetos, questionando- -os sobre a quantidade de café existente em cada caneca. Assim, é possível observar que é possível criar e manipular qualquer objeto, fazendo com que estes realizem diversas funções em um aplicativo. Em uma situação mais cotidiana da plataforma Android, temos o objeto câmera, que representa a câmera física do dispositivo. Por meio deste objeto, podemos manipular a câmera para que tire uma foto com base nas propriedades que definimos e nos métodos que chamamos para configurá-la. Antes de criarmos uma classe que represente um objeto, temos de estudar os tipos de dados disponíveis, uma vez que a programação é basicamente um trabalho com dados. Segundo Goodrich e Tamassia (2013), Java possui basicamente dois grupos de tipos de dados: � tipos primitivos — correspondem a dados mais simples ou escalares; � tipos por referência — correspondem a tipos de dados representados por classes, ou seja, todos os outros tipos de dados não primitivos. Na Figura 1, podemos observar os tipos primitivos de dados existentes na linguagem Java, bem como os limites de valores que estes tipos podem armazenar. Por exemplo, uma variável do tipo byte não pode armazenar o valor 400, visto que esta só armazena dados até 127 positivo. Linguagem Java: conceitos essenciais2 Figura 1. Tipos primitivos de dados. Fonte: Schützer e Massago (2008, documento on-line). Os tipos por referência são classes, conforme já citamos e, por convenção de nomenclatura, as classes em Java são nomeadas com a primeira letra do nome em maiúsculo. Por exemplo, Goodrich e Tamassia (2013) relatam queString é um dos tipos de dados por referência mais comuns da linguagem Java, sendo que a String é basicamente uma lista de elementos char. Ou seja, podemos armazenar a frase “Android é uma boa plataforma” em uma variável do tipo String, em que cada uma das letras seria um char. 3Linguagem Java: conceitos essenciais Na linguagem Java você pode inserir frases e comentários junto ao código do seu aplicativo, sem que estas informações realizem qualquer interferência no fluxo do programa. Abaixo temos um exemplo: //Este é um comentário de uma linha O texto após as // não é interpretado pelo compilador do Java, ou seja, serve para que os desenvolvedores escrevam informações pertinentes no código, seja para identificar o que um determinado trecho de código faz ou outra informação qualquer. Também podemos criar comentários de várias linhas em Java. Neste caso, o comentário é realizado utilizando um bloco, conforme exemplo abaixo (o comentário inicia com /* e é finalizado com */): /* Início do comentário, Segunda linha do comentário e o Final do comentário */ Uma variável é basicamente um recipiente que possui um determinado tipo, sendo que este define o tipo de dado que a variável irá armazenar. Isso se deve ao fato de a linguagem Java ser estaticamente “tipada”, ou seja, devemos informar ao Java o tipo da variável que estamos definindo. Abaixo temos um exemplo: String Cliente = "Alberto Ribeiro"; No exemplo acima, criamos uma variável do tipo String, cujo nome é Cliente. Ainda podemos identificar o operador de atribuição = (veremos adiante outros operadores, sendo o operador de atribuição = um dos mais básicos da linguagem Java) e o valor que está sendo atribuído Alberto Ribeiro, no final temos o identificador do final do comando ;. Ou seja, na variável Cliente temos o texto indicado, sendo o valor armazenado na variável que criamos. Linguagem Java: conceitos essenciais4 O conceito básico de uma classe é apresentado abaixo, em que temos uma classe Pessoa com um atributo do tipo String chamado nome e um construtor (void Pessoa(String nome)) que inicializa o atributo nome com o valor, passado no construtor: class Pessoa { String nome; Pessoa(String nome) { this.nome = nome; } } Observe, no exemplo acima, a declaração this. Quando utilizamos essa declaração, estamos informando que o atributo utilizado está declarado na classe. Logo, this.nome pertence à classe e nome se refere ao parâmetro passado ao construtor. Abaixo, podemos observar um modelo conceitual de classes, [class|abstract|interface] [Nome da Classe] { [Construtor] [Atributos ou Variáveis] [Métodos] } em que: � [class|abstract|interface] — refere-se ao tipo, que pode ser class, ou seja, uma classe do tipo class, ou uma interface, sendo que este define uma espécie de padrão ou interface padrão que uma classe deve implementar. Ainda possuímos a abstract class, que é uma classe abstrata, sendo que esta pode conter métodos implementados e não implementados (os conceitos de interface e classe abstrata serão desenvolvidos no decorrer deste capitulo); � [Nome da Classe] — deve ser único no pacote atual e seguir as mesmas regras de nomenclatura dos métodos; 5Linguagem Java: conceitos essenciais � [Construtor] — um método que é chamado por padrão ao utilizar (instanciar) uma classe, sendo que este método pode inicializar os atributos da classe ou simplesmente não conter implementação alguma. Deve possuir o mesmo nome da classe e sua existência é obrigatória, mesmo que não contenha implementação, no caso de se tratar de uma interface que não possui nenhum construtor; � [Métodos] — segue o padrão já mencionado anteriormente para métodos, com a diferença de que, em interfaces, não temos a imple- mentação do método, apenas sua definição. Os exemplos ficariam void Calcula ();, float ValorPI(); e float Total (int Qtd, flota Preco); e a classe que implementar essa interface deve também realizar a implementação destes métodos. As classes em Java, além das variáveis e dos atributos, possuem ainda métodos, sendo que os métodos podem realizar diversos comandos. A estrutura de um método pode ser observada abaixo: [retorno] [nome do método]([tipo dos dados] [nome do parâme- tro], …) { [código do método] [return] [valor do retorno] } Observe, a seguir, o que significa cada termo da estrutura de um método, como vimos acima: � [retorno] — é o tipo de dado (seja ele primitivo ou do tipo referência) que o método irá retornar. Uma vez informado, é obrigatório que seja retornado um valor. Para não retornar nenhum valor, informamos ao invés do tipo da variável a palavra void, que significa que nada será retornado; � [nome do método] — nome que remeta à funcionalidade do método. As únicas ressalvas ao nomear o método são que caracteres especiais e espaços não devem ser utilizados e o nome do método não pode conter espaços. Neste caso, podemos utilizar o caractere underline (por exemplo, Nome _ Pessoa); � [tipo dos dados] [nome do parâmetro] — um método pode não possuir parâmetros. Neste caso, utilizam-se os ( ), sem nenhuma informação entre os parênteses. Porém, podemos informar um ou mais Linguagem Java: conceitos essenciais6 parâmetros, em que o tipo de dados deve ser informado logo após o nome do parâmetro, que segue a mesma regra de nomenclatura do método, sendo que as várias declarações de parâmetros devem ser separadas por ,. Observe que os parâmetros devem receber diferentes nomes; � [código do método] — conjunto de códigos que o método realiza; � [return] [valor do retorno] — esta linha pode não existir se o retorno do método for void. Porém, caso um retorno seja informado, o comando return seguido do valor ou da variável do mesmo tipo do retorno deve ser também informado. Exemplo 1 Exemplo 2 Exemplo 3 class Area { float area; float lado; void Calcula (){ this.Area = this.Lado * this.Lado } } class Valores { float ValorPI(){ return 3.14f; } } class Produto { float Total (int Qtd, float Preco){ return Qtd * Preco; } } Quadro 1. Exemplos de métodos No Quadro 1 observamos três exemplos de possíveis métodos: � exemplo 1 — o this indica que as variáveis do método pertencem à classe a qual o método também pertence e, no caso, o método está atribuindo ao atributo area o resultado da operação de multiplicação (representada pelo operador de multiplicação *) do atributo lado por ele mesmo (possivelmente seria a área de um quadrado, portanto os lados seriam iguais, assim basta armazenar o tamanho de um lado); � exemplo 2 — método que retorna um valor do tipo float, no qual temos o retorno do valor 3.14f , em que f indica que o valor é do tipo float; � exemplo 3 — o método Total recebe dois parâmetros Qtd e Preco, realizando a multiplicação desses valores, retornando o resultado deste cálculo. 7Linguagem Java: conceitos essenciais Conceitos e modificadores Segundo Deitel, Deitel e Wald (2016), na linguagem Java está disponível um recurso muito importante para o desenvolvimento e a estruturação de um pro- jeto: os moderadores de acesso. Estes são empregados para restringir o acesso a um método, atributo ou até a uma classe. Entretanto, independentemente do moderador escolhido, um atributo ou método é sempre acessível, isto é, pode ser chamado, a partir de qualquer outro método contido na mesma classe. Os moderadores de acesso mais comuns do Java são os seguintes: � public — um atributo ou método que utiliza este moderador é público e pode ser chamado a partir de métodos contidos em qualquer outra classe, sendo esta a condição de menor restrição da linguagem; � protected — utilizando este moderador, o atributo ou método pro- tegido pode ser chamado por todas as classes existentes no pacote da classe em questão; � private — quando um atributo ou um método é privativo na classe que o contém e seu uso é vedado a qualquer outra classe, ou seja, so- mente métodos daprópria classe podem executar uma chamada a este. Java é uma linguagem amplamente utilizada em diversas áreas, não somente para programação Android, mas também em desenvolvimentos para desktops, Web e outros. Nos links a seguir você pode acessar o site oficial do Java, além da página com a documentação da linguagem e outras informações. https://qrgo.page.link/E4PEm https://qrgo.page.link/yaAq8 Além dos moderadores de acesso, os métodos e atributos ainda possuem outros modificadores, voltados a outras características. Um destes modifica- dores é o modificador static, que pode ser utilizado em classes, métodos e atributos. Uma vez utilizado em um método, este poderá ser acessado por qualquer classe (observando o moderador de acesso) sem a necessidade de instanciá-la. Um método static não pode acessar qualquer variável decla- Linguagem Java: conceitos essenciais8 rada dentro de uma classe, exceto no caso de a variável também ser declarada como static. Mas a situação contrária é permitida: um método comum pode acessar métodos e atributos static. Abaixo, temos um exemplo de método do tipo static com o nome getPI. Observe que não instanciamos a classe Area: public class Area { public static float getPI(){ return 3.14f; } } // Podemos utilizá-lo da seguinte maneira: Area.getPI(); Outro detalhe sobre o modificador static é que, uma vez utilizado em uma classe (static class), obrigatoriamente toda a classe (incluindo métodos e atributos) deve ser declarada com o modificador static. Segundo Goodrich e Tamassia (2013), alguns dos conceitos mais importan- tes da linguagem Java são o encapsulamento, a herança e o polimorfismo. O encapsulamento é uma característica muito importante que trata da capacidade de isolar informações do restante do programa. Assim, uma vez construída uma determinada classe, o desenvolvedor não precisa mais se preocupar com suas características internas, já que realiza as chamadas dos métodos. Caso seja necessário realizar alguma alteração em um método, ao realizar esta alteração todos os pontos que o utilizam automaticamente irão receber tais alterações. Dessa forma, o desenvolvedor pode garantir que a informação não será corrompida acidentalmente pelo resto do programa, tornando-a robusta e confiável. Para um desenvolvedor experiente, o conceito de modificadores pode ser muito simples, mas para desenvolvedores sem tanta experiência, o uso de modificadores pode ser bem confuso. Ao iniciar a programação de aplicativos sem conhecer a fundo a linguagem de programação, procure utilizar modificadores mais simples, como o public e o private. À medida que for adquirindo experiência, aventure-se a utilizar modificadores mais complexos. 9Linguagem Java: conceitos essenciais A herança é um conceito importante da linguagem Java. Nesse processo, uma classe que implementa ou é estendida a outra herda todos os seus métodos e atributos. Na Figura 2 temos um exemplo clássico de herança, em que a classe Animal é estendida à classe Mamífero, que por sua vez é estendida à classe Cachorro. Ao instanciar uma classe Cachorro, este poderá utilizar os métodos nascer, morrer e mamar, pois estes serão herdados das classes Animal (métodos nascer e morrer) e Mamífero (método mamar). Para criar uma classe Gato, por exemplo, seria necessário apenas estendê-la à classe Mamífero e implementar o método miar. Figura 2. Exemplo de classes Java, demonstrando o conceito de herança. Linguagem Java: conceitos essenciais10 Temos, ainda, o modificador abstract, no qual é possível declarar um método sem o implementar. Dessa forma, uma classe que implementa a classe que contém métodos abstract deve repetir sua declaração abstrata, imple- mentando-a ou não; porém, em algum momento ela deve ser implementada. Funciona como uma espécie de lembrete para que alguma classe derivada complete a declaração fornecendo um corpo. Na Figura 3 temos um exemplo de classe abstrata, em que a classe Animal é do tipo abstract e já possui os métodos nascer e mamar implemen- tados. No entanto, os métodos voz e alimentar são abstratos e devem ser implementados em classes que forem estendidas à classe Animal. No caso, a classe Cachorro foi estendida à classe Animal e implementou os métodos abstratos voz e alimentar com a implementação adequada. Figura 3. Exemplo de classes Java, demonstrando o conceito de classe abstrata. 11Linguagem Java: conceitos essenciais O modificador final identifica que nenhuma classe derivada pode alterar ou redefinir este método ou atributo. Dessa forma, um método declarado como final deve ser obrigatoriamente implementado. No exemplo abaixo, uma classe estendida à classe Area não poderá criar uma nova implementação para o método getPI. public class Area { public final float getPI(){ return 3.14f; } } Segundo Deitel, Deitel e Deitel (2015), a interface é uma funcionalidade da orientação ao objeto utilizado em Java que define ações que devem ser obrigatoriamente executadas, mas que cada classe pode executar de forma diferente. As interfaces contém valores constantes ou assinaturas de métodos que devem ser implementados dentro de uma classe. No caso da Figura 4, podemos observar ainda uma utilização prática das interfaces, em que a interface InterfacePessoa prevê todos os métodos necessários para uma determinada implementação, sendo que esta interface foi implementada pela classe abstrata Pessoa, que implementou os métodos getIdade e setIdade, visto que em uma implementação das classes Mulher e Homem os métodos indicados teriam uma implementação idêntica para ambos os objetos, podendo, dessa forma, serem herdados por estes. Uma peculiaridade está no método getSexo, cuja implementação se deu na classe Mulher e Homem, em virtude dessa informação ser diferente em ambos os casos. Linguagem Java: conceitos essenciais12 Figura 4. Exemplo de classes Java, demonstrando a utilização de interfaces. Um dos conceitos mais utilizados da linguagem Java é o polimorfismo, que promove a reutilização contínua dos códigos, ou seja, possibilita que algo assuma várias formas. No contexto da programação orientada a objetos (sendo o Java, conforme já mencionado, uma linguagem totalmente orientada a objetos), ele nos mostra como um método pode assumir formas diferentes das inicialmente implementadas e agir de modo que possa ser utilizado por outra classe. Na Figura 2, em que observamos o conceito de herança (os conceitos de herança e polimorfismo trabalham lado a lado na linguagem Java), podemos observar o conceito de polimorfismo também quando a classe Pessoa assume a forma das classes Homem e Mulher. 13Linguagem Java: conceitos essenciais Na Figura 5 podemos identificar outra face do polimorfismo. No exemplo, os métodos ImprimeIdade, ImprimeSexo e ImprimeSexoIdade recebem, por parâmetro, uma classe Pessoa, sendo que esta pode ser do tipo Mulher ou Homem e, de acordo com essa passagem de parâmetros, podemos ter a impressão do respectivo sexo e idade (a idade, no caso, depende do valor atribuído à variável Idade, presente na classe Pessoa). Essa passagem de parâmetro genérica se dá pelo fato de que uma mulher ou um homem são pessoas, caracterizando um conceito do polimorfismo. Figura 5. Exemplo de classes Java, demonstrando o conceito de polimorfismo. Outro conceito do polimorfismo presente na Figura 5 é a sobrecarga, em que possuímos na classe Auxiliar três métodos imprime e somente é possível possuir estes três métodos com o mesmo nome, em virtude dos métodos possuírem parâmetros diferentes. No caso, o método imprime, que realiza a impressão da idade, recebe um parâmetro do tipo int, enquanto o método que realiza a impressão do sexo recebe um parâmetro do tipo String. Frente à Linguagem Java: conceitos essenciais14 sobrecarga prevista no polimorfismo, eles são diferentes; logo, são permitidos. Ainda temos o caso do método Imprime, que recebe dois parâmetros que se diferenciamainda mais dos outros e, com isso, também se tornam válidos. Java na prática: operadores, condicionais, laços de repetição Na linguagem Java é muito comum a realização de cálculos matemáticos ou uma comparação entre variáveis, assim como a repetição de uma determinada rotina até que uma condição seja atingida. Para que isso seja possível, o Java possui operadores. Na Figura 6 podemos observar esses operadores disponíveis na lingua- gem Java (na ilustração eles estão divididos em grupos, conforme suas funções). Figura 6. Tipos de operadores disponíveis na linguagem Java. Fonte: Schützer e Massago (2008, documento on-line). Segundo Deitel, Deitel e Deitel (2015), os operadores de atribuição, como o próprio nome sugere, são capazes de atribuir um determinado valor a algo, normalmente uma variável. Um exemplo seria uma variável x do tipo inteiro (no caso int), à qual podemos atribuir o valor 10 utilizando a simples ex- pressão x = 10. Aliado a este operador de atribuição, temos os operadores de adição, subtração e divisão. Na Figura 7 é possível observar operações de adição (operador +), subtração (operador -), multiplicação (operador *) e divisão (operador /), além de uma operação envolvendo duas variáveis. Existe, ainda, o operador módulo %, que calcula o resto de uma divisão. Por exemplo, x = 5 % 2, em que x ao final da operação será igual a 1, visto que este é o resto da divisão. 15Linguagem Java: conceitos essenciais Podemos, ainda, utilizar o operador de atribuição = combinado aos ope- radores matemáticos, resultando em expressões mais simples. Por exemplo, a expressão de soma x = x + 10 (operação de soma existente na Figura 7) poderia ser codificada utilizando o operador de soma combinado ao operador de atribuição, gerando a expressão x += 10, que é exatamente o mesmo que x = x + 10, sendo que este pode ser realizado com as demais operações matemáticas. Figura 7. Operador de atribuição = em operações matemáticas. Também temos operações de atribuição que não utilizam o operador =. Neste caso, estamos falando dos operadores de incremento e decremento. Por exemplo, a operação x = x + 1, que também é idêntica à operação x += 1, pode ser escrita de forma ainda mais simplificada, utilizando o operador unário de incremento, resultando em x++. Em todos os exemplos citados serão somados 1 ao valor já existente em x. Os sinais unários são utilizados para identificar se um número é positivo (sinal unário +) ou negativo (sinal unário -), sendo que ao não informar o sinal unário de um número, o programa irá entender que se trata de um nú- mero positivo. Vamos imaginar a variável do tipo byte recebendo o valor 10 negativo. Neste caso, teríamos o código byte z = -10, ou seja, a variável z será igual a 10 negativo. Linguagem Java: conceitos essenciais16 Ao declarar os nomes de variáveis e classes, você deve tomar cuidado para não uti- lizar as palavras reservadas da linguagem Java. Por exemplo, a palavra int deve ser utilizada somente em seu propósito original, ou seja, declarar uma variável deste tipo. Portanto, você não pode colocar o nome de uma variável como int. A seguir, temos uma lista de palavras reservadas da linguagem: abstract, continue, for, new, switch, assert, default, goto, package, synchronized, boolean, do, if, private, this, break, double, implements, protected, throw, byte, else, import, public, throws, case, enum, instanceof, return, transient, catch, extends, int, short, try, char, final, interface, static, void, class, finally, long, strictfp(2), volatile, const, float, native, super e while. Deitel, Deitel e Deitel (2015) definem os operadores de comparação como ferramentas de suma importância para o desenvolvimento de qualquer software, seja ele um aplicativo Android ou outro. Essa afirmação se deve ao fato de que estes operadores fornecem a linguagem o poder de dar ao código a to- mada de decisão. Por exemplo, se você deseja comprar um produto que custa R$ 12,00 mas possui apenas R$ 10,00 na carteira, a compra não pode ser concluída, visto que você não possui dinheiro suficiente. Para inserirmos essa tomada de decisão em um código Java, utilizamos a cláusula condicional if, que significa “se”. Assim, em uma linguagem formal, já podemos escrever o exemplo, ficando “se o dinheiro na carteira for maior ou igual ao valor do produto, então a compra pode ser realizada; caso contrário, você não possui dinheiro suficiente”. Em Java, teríamos: float produto = 12f; float carteira = 10f; if (carteira >= produto) { // Entao você possui dinheiro suficiente } else { //Você não pode comprar, dinheiro insuficiente } //Segue o fluxo do programa 17Linguagem Java: conceitos essenciais Dessa forma, já introduzimos também o operador de comparação maior ou igual >=. Podemos utilizar também os demais operadores de comparação: � >: compara se um valor é maior que outro; � <: compara se um valor é menor que outro; � <=: compara se um valor é menor ou igual a outro; � ==: comparação simples entre dois valores, verificando se ambos são iguais e apenas iguais; � !=: comparação simples entre dois valores, verificando se ambos são diferentes. A cláusula if pode possuir várias operações de comparação utilizando a cláusula elseif(comparação), ou seja, podemos ter o if(comparação 1) com a sua comparação, seguido de quantos elseif(comparação2..3..4) forem necessários para a lógica do programa, podendo finalizar com o else, que significando que caso nenhuma comparação seja satisfeita, o código da cláusula else será executado, observando também que somente o if é obrigatório. Portanto, podemos utilizar o elseif e o else apenas se na lógica da rotina for necessário. Dentro das cláusulas condicionais, ainda possuímos a cláusula switch, que pode simplificar a execução de várias comparações de uma variável. No link a seguir você pode obter mais informações sobre a cláusula switch. https://qrgo.page.link/ungAZ Para completar este conjunto de operações visto até então, temos os laços de repetição, sendo o mais simples deles o while, que em uma linguagem formal seria “enquanto uma comparação for satisfeita, repete um conjunto de código”. Linguagem Java: conceitos essenciais18 Figura 8. Exemplos de operação de “while” e de “do...while”. Fonte: Schützer e Massago (2008, documento on-line). Na Figura 8, encontramos alguns exemplos do bloco de repetição while, sendo: � exemplo 1 — a rotina presente no while é executada enquanto o valor de k for menor que 10, ou seja, será executado até que k seja incrementado pelo operador unário ++ e atingir o valor 10; � exemplo 2 — nesta rotina, h é inicializado com zero e a rotina presente no while será executada até que h mude para outro valor, sendo que, no caso, isso ocorrerá somente quando o teste if for satisfeito; � exemplo 3 — a variável i é inicializada com o valor 10 e, assim, o bloco while não é executado, pois somente seria executado caso i fosse menor ou igual a cinco. Dessa forma, o programa segue seu fluxo normal após o while; � exemplo 4 — no do while, a rotina presente neste bloco é executada pelo menos uma vez, podendo repetir novamente se ao final da primeira execução o teste do while for satisfeito. No exemplo, a rotina será executada apenas uma vez. 19Linguagem Java: conceitos essenciais O laço de repetição for tem uma complexidade um pouco maior. Na Figura 9 temos um exemplo ilustrado de uma implementação do laço for. Para um melhor entendimento, vejamos mais informações abaixo: � int x = 0; — este código é executado apenas uma vez e é chamado de inicialização. Nesta inicialização temos a declaração da variável x e sua inicialização com o valor zero, sendo que ela não será executada novamente. Observe que a variável x poderia estar declarada em outro local e, neste caso, ela poderia ser inicializada apenas com x = 0; ou nem ser inicializada, contando apenas com a presença do ;; � x <= 10; — esta é a condição que verifica se olaço deve ser repetido. Após a inicialização ele é verificado e, caso seja satisfeito, a rotina do laço é executada uma vez; � x++ — este é o incremento (poderia ser decrementado, também utili- zando -- ou outros operadores, como o += 10) ao final da execução da rotina do laço de repetição. A variável x é incrementada e após o seu incremento a condição (x <= 10) é verificada, ou seja, quando x atingir o valor 11, o laço de repetição não será repetido e o programa seguirá seu fluxo. Figura 9. Ilustração do uso do for. Fonte: Schützer e Massago (2008, documento on-line). É importante salientar que os laços de repetição while e for também podem ser interrompidos a qualquer momento, executando o comando break;. Linguagem Java: conceitos essenciais20 DEITEL, P.; DEITEL, H.; DEITEL, A. Android: como programar. 2. ed. Porto Alegre: Book- man, 2015. 690 p. DEITEL, P.; DEITEL, H.; WALD, A. Android 6 para programadores: uma abordagem baseada em aplicativos. 3. ed. Porto Alegre: Bookman, 2016. 618 p. GOODRICH, M. T.; TAMASSIA, R. Estruturas de dados e algoritmos em Java. 5. ed. Porto Alegre: Bookman, 2013. 736 p. SCHÜTZER, W.; MASSAGO, S. Tipos de dados. In: SCHÜTZER, W.; MASSAGO, S. Tutorial de programação Java. São Carlos: Departamento de Matemática, Universidade Federal de São Carlos, 2008. Disponível em: https://www.dm.ufscar.br/profs/waldeck/curso/ java/part22.html. Acesso em: 16 jun. 2019. Leitura recomendada SCHILDT, H. Java para iniciantes: crie, compile e execute programas Java rapidamente. 6. ed. Porto Alegre: Bookman, 2015. 704 p. 21Linguagem Java: conceitos essenciais DESENVOLVIMENTO PARA DISPOSITIVOS MÓVEIS Diego Bittencourt de Oliveira Componentes dos aplicativos Android Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Identificar os principais componentes dos aplicativos Android. � Descrever os componentes activities, services, intents, content providers e broadcast receivers. � Comparar os papéis dos vários componentes de um aplicativo Android. Introdução Neste capítulo, você irá conhecer a estrutura dos componentes que formam um aplicativo Android, verificando como este é executado e gerenciado em vários aspectos como, por exemplo, suas permissões. Conheceremos os quatro componentes-base que formam um apli- cativo, no caso, as activities, os services, os broadcast receivers e os content providers, explorando as funcionalidades que estes fornecem para o desenvolvimento de um aplicativo. Ainda veremos como funciona um intent e como este é utilizado na comunicação dos componentes do apli- cativo, do aplicativo com o sistema Android e com os demais aplicativos instalados no dispositivo. Principais componentes de um aplicativo Android Segundo Deitel, Deitel e Wald (2016), os aplicativos Android são desenvolvidos em linguagem de programação Java. Nesta linguagem, as ferramentas do Android SDK realizam a compilação do código junto a todos os arquivos de dados e recursos. Assim é gerado o chamado APK, um pacote Android em formato de arquivo com a extensão .apk. Um arquivo APK carrega todo o conteúdo de um aplicativo Android, sendo estes arquivos utilizados pelos dispositivos que portam o sistema operacional Android para instalar o aplicativo neles. Uma vez instalado no dispositivo, cada aplicativo possui as características listadas a seguir. � O sistema operacional Android é baseado em um sistema Linux mul- tiusuário, em que cada aplicativo corresponde a um usuário diferente. � Um identificador de usuário (também chamado de ID) é criado e atri- buído a cada aplicativo pelo sistema Linux. Dessa forma, o sistema define as permissões para todos os arquivos de um aplicativo em que somente o ID atribuído a este pode acessar seus arquivos. � Cada processo possui sua própria máquina virtual (também chamada de VM), fazendo com que cada aplicativo seja executado de forma isolada dos demais. � Cada aplicativo é executado no próprio processo Linux por padrão. O processo é iniciado pelo Android quando este necessita de um compo- nente do aplicativo e, em seguida, o encerra quando não mais neces- sário ou quando o sistema necessitar liberar memória para os demais aplicativos. Um aplicativo Android também possui um identificador do tipo ID para o aplicativo, amplamente utilizado em seu projeto. Para mais informações sobre o ID de aplicativo, acesse o link a seguir. https://qrgo.page.link/8tx5Z Por estas características o Android implementa o princípio do privilégio mínimo, em que cada aplicativo tem acesso somente aos componentes ne- cessários para a execução de seu trabalho. Dessa forma, o Android cria um ambiente seguro, no qual o aplicativo não pode acessar partes do sistema às quais não possui permissão. Componentes dos aplicativos Android2 Um aplicativo pode compartilhar dados com outros aplicativos ou acessar e compartilhar dados com o sistema da seguinte maneira: � compartilhando o mesmo ID de usuário do Linux, assim ambos serão capazes de acessar arquivos um do outro; � solicitando permissão para acessar dados do dispositivo, como contatos de usuário, mensagens SMS, câmera, bluetooth, entre outras permis- sões. Nesse caso, o usuário necessita conceder acesso a estes recursos de forma manual. A Figura 1 ilustra uma solicitação de permissões na instalação do aplicativo. No exemplo, temos a solicitação de acesso aos contatos, à localização e ao microfone. Figura 1. Solicitação de permissões ao instalar um aplicativo. Fonte: Permissions... (2019, documento on-line). 3Componentes dos aplicativos Android Você pode obter mais informações sobre as diversas permissões que o Android possui pelo link a seguir. https://qrgo.page.link/EeDSm Estas são informações básicas sobre como um aplicativo Android é tratado dentro do ambiente Linux, que é a base do sistema Android. Um aplicativo é definido como um conjunto de componentes, que são as estruturas funda- mentais que definem o aplicativo. Deitel, Deitel e Deitel (2015) definem os componentes como blocos que compõem uma aplicação Android, sendo estes declarados no arquivo de ma- nifesto do projeto, que além desta declaração ainda possui configurações do aplicativo e configurações dos componentes. Cada componente é um ponto de entrada ao aplicativo, porém nem todos os componentes são pontos de entrada reais para o usuário, visto que em alguns casos uns dependem dos outros. O manifesto é um arquivo de suma importância para o projeto Android. Configurações importantes são realizadas por meio deste manifesto e muitos comportamentos do projeto são definidos neste arquivo. Para obter mais informações, acesse o link a seguir. https://qrgo.page.link/pfrbC Segundo a Android, seus projetos possuem quatro componentes básicos, conforme a seguir. � Activities (atividades): representam uma tela com uma interface de usuário. � Services (serviços): componentes executados em segundo plano para realizar operações de longa execução ou processos de trabalho remotos. Componentes dos aplicativos Android4 � Content providers (provedores de conteúdo): gerenciam um conjunto compartilhado de dados. � Broadcast receiver (receptores de transmissão): componentes que respondem a anúncios de transmissão por todo o sistema. A Figura 2 representa um exemplo de pacote de componentes de um apli- cativo Android. Neste exemplo, podemos observar que o pacote é composto por activities, services, content providers e broadcast receivers, o que não dita nenhuma regra, pois é possível projetar um aplicativo que não possua nenhum service, por exemplo. Logo, a ocorrência destes componentes se dá conforme a necessidade de implementá-los para que as funcionalidades da solução sejam contempladas. Figura 2. Exemplo de aplicativo Android com seus componentes. Activities, services e intents Simon (2011) explica que um activity é um modulo único e independente que na maioria das vezes está diretamente relacionado a uma
Compartilhar