34
Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

Embed Size (px)

Citation preview

Page 1: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

Projeto Avançado de Software II

2 – Revisão da Lição 1

Eduardo de Lucena Falcão

Page 2: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

2

Tópicos básicos

• Instalação do Android Studio• Criação e execução do HelloWorld• Configuração de um novo dispositivo no AVD

Manager ou no Genymotion

Page 3: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

3

The Android Platform

Android Software Stack

Page 4: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

4

Linux kernelA base de toda a arquitetura do Android.

Responsabilidades:1. Responsável por tarefas de baixo

nível relacionadas ao Sistema Operacional:

1. gerenciamento de memória;2. gerenciamento de processos; 3. operações em arquivos;4. comunicação através da rede.

2. Específicas do Android:1. gerenciamento de energia;2. gerenciamento de memória

(low memory killer)3. comunicação inter-processos4. gerenciamento dos drivers do

dispositivo móvel: câmera, display, wi-fi, audio, etc.

Page 5: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

5

• Quais das seguintes funcionalides do Kernel Linux da arquitetura Android você acha que seria possível encontrar em outros Kernels de Linux convencionais?– Arquitetura de permissões;– Criação de arquivos;– Comunicação através da rede;– Gerenciamento de memória no estilo “Low

Memory Killer”;– Drivers de dispositivos;– Gerenciamento de energia.

Page 6: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

6

Native Libraries

Inclui uma variedade de bibliotecas de sistemas escritas geralmente em C/C++ que são utilizadas para executar atividades básicas do dispositivo.

1. Webkit: renderizar páginas web2. Graphics – surface manager:

renderização da tela3. Media framework: reprodução de

áudio e vídeo4. OpenGL: renderização de gráficos

de alta performance (3D)5. SQLite: gerenciamento de bancos

de dados relacionais

Page 7: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

7

Android Runtime

Bibliotecas Java e o coração do Android: Dalvik Virtual Machine

Dalvik VM: • similar à JVM mas otimizada para o

contexto de dispositivos móveis (CPUs mais lentas, capacidade de memória e bateria limitadas);

• Usa funcionalidades da camada subjacente (linux kernel)

Page 8: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

8

• Aplicativos Android executam em uma JVM padrão?– Sim;– Não.

Page 9: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

9

Application FrameworkConjunto de componentes reutilizáveis que a maioria da aplicações Android utilizam para executar.

1. Activity Manager: controla todos os aspectos do ciclo de vida de uma aplicação, além da pilha de navegação;

2. Content Providers: permite aplicações compartilhar dados entre si;

3. Resource manager: recursos não compiláveis do app - strings, graphics e arquivos de layout

4. Notification Manager: permite apps exibir notificações e alertas para o usuário;

5. Location manager: dá acesso à serviços de localização, permitindo um app receber atualizações de mudança de localização.

Page 10: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

10

• Quais das seguintes funções você acha que o Activity Manager executa?– Iniciar e parar Activities;– Gerenciar navegação entre Activities;– Gerenciar a barra de status.

• Qual das seguintes afirmações contem a vantagem de usar Content Providers para gerenciar os dados de uma aplicação?– O processamento é mais rápido usando um Content Provider– Os dados podem ser inseridos em uma aplicação mas podem

ser facilmente acessados em outras aplicações– Android só tem essa maneira de gerenciar dados.

Page 11: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

11

• Quais das seguintes funções você acha que o Activity Manager executa?– Iniciar e parar Activities;– Gerenciar navegaçãeo entre Activities;– Gerenciar a barra de status.

• Qual das seguintes afirmações contem a vantagem de usar Content Providers para gerenciar os dados de uma aplicação?– O processamento é mais rápido usando um Content Provider– Os dados podem ser inseridos em uma aplicação mas podem

ser facilmente acessados em outras aplicações– Android só tem essa maneira de gerenciar dados.

Page 12: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

12

• A Área de Notificação ou Bara de Status é uma parte do sistema que as aplicações acessam através do Gerenciador de Notificações. Quais das seguintes explicações aparentam ser as possíveis razões pelas quais o Android projetou a Área de Notificação deste modo?– Para obter melhor desempenho de aplicação;– Para prover um modo de informar usuários sobre

eventos for a da Interface de Usuário da Activity;– Para prover uma área controlada pelo sistema que

é quase sempre visível ao usuário.

Page 13: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

13

Application

Camada em que rodamos nossas aplicações e as aplicações padrão.

Standard apps:1. Home- tela principal;2. Contacts – banco de dados dos

contatos3. Phone – app para efetuar ligações4. Browser5. Email6. Nossas apps

Page 14: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

14

Build e Gradle

• Pode ser especificado no gradle ou no manifest– compiledSdkVersion: versão usada para compilar o

projeto– minSdkVersion: filtro de corte mínimo

• versão mínima do SDK que os aparelhos devem possuir para rodar seu app

– TargetSDK: não é um filtro de corte máximo• especifica a versão na qual o app foi testado• Porém, caso as futuras versões do SDK mudem

significativamente, a plataforma usa o targetSDK para rodar o app de modo mais estável

MAS, o Gradle sobrescreve o valores do manifest

Page 15: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

15

Processo de build

Page 16: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

16

API Levels

• Define:– Um conjunto de classes e pacotes– Elementos e atributos XML que podem ser usados

no manifest– Elementos e atributos XML que podem ser usados

para declarar e acessar recursos (ex.: layout, imagens, strings)

– Um conjunto de Intents– Um conjunto de Permissions

Page 17: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

17

Interface Elements

• Drag and Dropping– TextView– ImageView– ListView

Page 18: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

18

Visão Geral de uma User Interface

• Todos os elementos da interface do usuário em um aplicativo para Android são criados usando objetos View e ViewGroup;

• Uma View é um objeto que desenha algo na tela com o qual o usuário pode interagir;

• Um ViewGroup é um objeto que contém outros objetos View e ViewGroups, para definir o layout da interface.

Page 19: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

19

• Para declarar o layout, é possível instanciar objetos View no código e começar a criar uma árvore. Mas a forma mais fácil e efetiva de definir o layout é com um arquivo XML. O XML oferece uma estrutura legível por humanos para o layout, similar a HTML.

Page 20: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

20

Layout• O layout define a estrutura visual para uma interface do usuário,

como a IU de uma Activity ou de um widget de aplicativo.• É possível declarar um layout de dois modos: XML ou

programaticamente.• A vantagem de declarar a IU em XML é separar melhor a

apresentação do aplicativo do código que controla seu comportamento. – é possível modificá-la ou adaptá-la sem modificar o código-fonte e

recompilar– é possível criar layouts XML para diferentes orientações de tela, diferentes

tamanhos de tela de dispositivos– Geralmente fornece um preview de como está a organização dos

elementos gráficos na tela

Page 21: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

21

• Cada arquivo de layout deve conter exatamente um elemento raiz, que deve ser um objeto View ou ViewGroup. Com o elemento raiz definido, é possível adicionar objetos como elementos filho para construir gradualmente uma hierarquia de View que define o layout.

LinearLayout

TextView Button

Layouts devem ser salvos no diretório res/layout/

Page 22: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

22

• Ao compilar o aplicativo, cada arquivo de layout XML é compilado em um recurso View. Deve-se carregar o recurso de layout do código do aplicativo na implementação de retorno de chamada Activity.onCreate(). Para isso, chame setContentView(), passando a referência para o recurso de layout na forma: R.layout.layout_file_name. Por exemplo: se o layout XML for salvo como main_layout.xml, será necessário carregá-lo para a Atividade desta forma:

Carregando o layout/XML

Page 23: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

23

Atributos• Cada objeto View e ViewGroup aceita uma variedade própria de

atributos XML. Alguns atributos são específicos de um objeto View (por exemplo, TextView aceita o atributo textSize), mas esses atributos também são herdados de objetos View que possam estender essa classe.

• Id: É um atributo XML comum a todos os objetos View e você o usará com frequência. A sintaxe de um ID, dentro de uma tag XML, é:

• O @ indica que o analisador de XML deve analisar a string para tomar certas ações. Ex.: o @+id, indica que a string my_button deve ser adicionada na lista de recursos (R.java) como um novo identificador.

Page 24: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

24

Binding de Views para Variáveis

• Crie uma instância da classe View (ou subclasse) e capture-a do layout usando findViewById:

Page 25: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

25

Parâmetros do Layout• layout_something

– Cada ViewGroup contem propriedades que definem seu tamanho e posição, que por sua vez restringem o tamanho e posição de cada View filha• wrap_content: seja do tamanho mínimo necessário para caber o conteúdo• match_parent : seja tão grande quanto sua View “pai” te permitir

Page 26: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

26

Layout Position and Size

1. Width2. Height3. Left4. Top

getWidth()getHeight()

getLeft()getTop()

Page 27: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

27

Layouts

Útil para layouts simples com uma única View filha (ex.: listView, preencheria todo o espaço). Escala com facilidade para diferentes tamanhos de tela.

Organiza as Views filhas em uma única linha ou coluna. Ela cria um scrollbar caso a quantidade de Views exceda a tela.

Permite especificar a posição de Views em relação a outra Views.

Page 28: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

28

Construindo Layouts através de Adaptadores

• Quando o conteúdo do nosso layout é dinâmico podemos usar um layout que é subclasse de AdapterView para que o populemos on-the-go.

ou seja• Um AdapterView é uma view cujos filhos são populadas por

um Adapter.– Sub-classes de AdapterView: ListView, GridView, Spinner e Gallery

Page 29: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

29

Adaptadores• As sub-classes de AdapterView usam Adaptadores para fazer a ligação dos

dados com o layout. O Adapter serve como um intermediador entre os dados e o AdapterView. O Adapter detém o conhecimento de como criar os elementos (ex.: listItem, no app Sunshine), então ele o cria e passa ao ListView (quando o ListView requisitar).

Page 30: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

30

Populando um AdapterView• É possível popular um AdapterView (ex: ListView, GridView)

através da ligação da instância do AdapterView com o Adapter. O Adapter recupera os dados de uma fonte externa e cria uma View para cada entrada.

• O Android provê várias sub-classes de Adapter que pode ser usada para fazer essa ligação entre os dados e a UI.– ArrayAdapter<T>, BaseAdapter, CursorAdapter,

HeaderViewListAdapter, ListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, SpinnerAdapter, ThemedSpinnerAdapter, WrapperListAdapter

Page 31: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

31

ArrayAdapter• Devemos usar este Adaptador quando a fonte de dados for

um Array. O ArrayAdapter cria uma View para cada elemento do array chamando toString() em cada elemento e colocando-o em um TextView.

mForecastAdapter = new ArrayAdapter<String>( getActivity(), R.layout.list_item_forecast, R.id.list_item_forecast_textview, weekForecast);

ListView listView = (ListView) rootView.findViewById(R.id.listView_forecast);listView.setAdapter(mForecastAdapter);

Page 32: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

32

ArrayAdapter

• Android documentation

Page 33: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

33

Android Studio Shortcuts• ctrl + shift + a ==> you can look for anything you want• ctrl + n ==> open a file• ctrl + n ==> File:50 ==> open a file on line 50• ctrl + shift + n ==> searches also in xml files• ctrl + d ==> copy and automatically pastes the current line• ctrl + b ==> goes to the parent file of that content• ctrl + p ==> show the list of parameter of that method• ctrl + j ==> shows a lot of quick code snippet such as foreach, try-catch, etc• tools:text ==> in the layout xml files, displays a text in preview mode but not in the deployed app• it is cool for testing purposes• alt + enter ==> shows the tip or error from the idea (lamp) symbol• ctrl + shift + backspace ==> (Navigate | Last Edit Location) brings you back to the last place where you

made changes in the code• ctrl + shift + F7 ==> to quickly highlight usages of some variable in the current file• Use F3 and Shift+F3 keys to navigate through highlighted usages• ctrl + o ==> show methods that can be overriden• ctrl + alt + l ==> formatar o código• shift + f6 ==> refactor

Page 34: Projeto Avançado de Software II 2 – Revisão da Lição 1 Eduardo de Lucena Falcão

34

Avaliação• Mini-testes (aproximadamente 6)

+• Entregáveis:

– Print das telas do app– Código parcial do projeto+

• Projeto final (individual)

• Nota– mini-testes (25%) + entregáveis (25%)– Projeto final (50%)