[FLISOL] Android Faixa Branca (Iniciando no Android) – 2013

Post on 01-Sep-2014

353 views 4 download

Tags:

description

Palestra ministrada no FLISOL Campinas 2013

Transcript of [FLISOL] Android Faixa Branca (Iniciando no Android) – 2013

eee19.com

AndroidFaixa Branca

Douglas Drumond!drumond.douglas@gmail.com

eee19.com

eu.about()

eee19.com

eu.about()

• Bacharel em Ciência da Computação

eee19.com

eu.about()

• Bacharel em Ciência da Computação

• Analista de software no Instituto de Pesquisas Eldorado

eee19.com

eu.about()

• Bacharel em Ciência da Computação

• Analista de software no Instituto de Pesquisas Eldorado

• Sócio e co-fundador da Y-MAX Consultoria em TI

eee19.com

eu.about()

• Bacharel em Ciência da Computação

• Analista de software no Instituto de Pesquisas Eldorado

• Sócio e co-fundador da Y-MAX Consultoria em TI

• Organizador do GDG Campinas

eee19.com

@Eldorado

Linux Kernel

Bibliotecas

Framework

Aplicações

Dalvik

eee19.com

@Eldorado

Linux Kernel

Bibliotecas

Framework

Aplicações

Dalvik

BP

eee19.com

http://www.flickr.com/photos/natalielucier/3619749009/

Hoje

eee19.com

http://www.flickr.com/photos/donkeyhotey/5666071828/

eee19.com

Ferramentas

eee19.com

Pré-requisitos

• JDK!

• Android SDK

eee19.com

Sistema Operacional

• Linux!

• Mac OS X (Intel)!

• Windows XP ou superior

eee19.com

Ferramentas

eee19.com

Ferramentas

eee19.com

Ferramentas

eee19.com

Ferramentas

eee19.com

Ferramentas

eee19.com

Ferramentas

• Remote debugger

• logcat

• DDMS

eee19.com

Ferramentas

eee19.com

Ferramentas

eee19.com

Ferramentas

eee19.com

Ferramentas

eee19.com

Ferramentas

eee19.com

Ferramentas

eee19.com

Ferramentas

eee19.com

Livre

• the definition of open: "mkdir android ; cd android ; repo init -u git://android.git.kernel.org/platform/manifest.git ; repo sync ; make"

http://twitter.com/#!/arubin/status/27808662429

eee19.com

Arquitetura

eee19.com

Arquitetura

Linux Kernel

eee19.com

Arquitetura

Linux Kernel

Bibliotecas Dalvik

eee19.com

Arquitetura

Linux Kernel

Bibliotecas

Framework

Dalvik

eee19.com

Arquitetura

Linux Kernel

Bibliotecas

Framework

Aplicações

Dalvik

eee19.com

Arquitetura

Linux Kernel

Bibliotecas

Framework

Aplicações

Dalvik

eee19.com

Dissecando as Aplicações

eee19.com

Activity

eee19.com

Service

eee19.com

Content Provider

eee19.com

Intent

eee19.com

Intent

eee19.com

Intent

eee19.com

Intent

eee19.com

Intent

eee19.com

Broadcast Receiver

• Não possui interface (com usuário)!

• Roda em segundo plano!

• Reage a mensagens de broadcast!

• Exemplo: carga de bateria

eee19.com

Activity

• Interface!

• Um objetivo!

• Várias por aplicativo!

• Pode iniciar outras activities

eee19.com

Activity

• 3 estados: ativa, em pausa e parada!

• 3 ciclos de vida!

• pode morrer a qualquer momento se não estiver ativa

eee19.com

Activity

eee19.com

ActivityonCreate()

eee19.com

ActivityonCreate()

onStart()

eee19.com

ActivityonCreate()

onStart()

onResume()

eee19.com

ActivityonCreate()

onStart()

onResume()

em execução

eee19.com

ActivityonCreate()

onStart()

onResume()

em execução

onPause()

eee19.com

ActivityonCreate()

onStart()

onResume()

em execução

onPause()

eee19.com

ActivityonCreate()

onStart()

onResume()

em execução

onPause()

Primeiro plano

eee19.com

ActivityonCreate()

onStart()

onResume()

em execução

onPause()

onStop()

Primeiro plano

eee19.com

ActivityonCreate()

onStart() onRestart()

onResume()

em execução

onPause()

onStop()

Primeiro plano

eee19.com

ActivityonCreate()

onStart() onRestart()

onResume()

em execução

onPause()

onStop()

Primeiro plano

eee19.com

ActivityonCreate()

onStart() onRestart()

onResume()

em execução

onPause()

onStop()

Primeiro plano

Visível

eee19.com

ActivityonCreate()

onStart() onRestart()

onResume()

em execução

onPause()

onStop()

onDestroy()

Primeiro plano

Visível

eee19.com

ActivityonCreate()

onStart() onRestart()

onResume()

em execução

onPause()

onStop()

onDestroy()

shutdown

Primeiro plano

Visível

eee19.com

ActivityonCreate()

onStart() onRestart()

onResume()

em execução

onPause()

onStop()

onDestroy()

shutdown

Primeiro plano

Visível

Ciclo de vida completo

eee19.com

Multitarefa

eee19.com

Multitarefa

eee19.com

Multitarefa

onCreate()

eee19.com

Multitarefa

onPause()

eee19.com

Multitarefa

eee19.com

Multitarefa

onResume()

eee19.com

Multitarefa

onPause()

eee19.com

Multitarefa

onStop()

eee19.com

Multitarefa

onStop() onCreate()

eee19.com

Multitarefa

onStop() onCreate()

onPause()

eee19.com

Multitarefa

onStop() onCreate()

onStop()

onPause()

eee19.com

Multitarefa

onStop() onCreate()

onStop()

onPause()

eee19.com

Multitarefa

onStop() onCreate() onCreate()

onStop()

onPause()

eee19.com

Multitarefa

onRestart()

onStop() onCreate() onCreate()

onStop()

onPause()

eee19.com

Multitarefa

onStart()

onRestart()

onStop() onCreate() onCreate()

onStop()

onPause()

eee19.com

Prática

• Criar uma aplicação com os métodos onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy() e onRestart()!

• Colocar logs nesses métodos e observar o que acontece

eee19.com

UI

• Hierarquia de ViewGroups e Views

eee19.com

View Group

ViewView Group View

View ViewView

http://developer.android.com/guide/topics/ui/overview.html

eee19.com

Layout<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"               android:layout_width="match_parent"               android:layout_height="match_parent"               android:orientation="vertical" >     <TextView android:id="@+id/text"               android:layout_width="wrap_content"               android:layout_height="wrap_content"               android:text="Hello, I am a TextView" />     <Button android:id="@+id/my_button"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="Hello, I am a Button" /> </LinearLayout> http://developer.android.com/

eee19.com

Layout

public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main_layout); }

Button myButton = (Button) findViewById(R.id.my_button);

http://developer.android.com/

eee19.com

Layout

• FrameLayout!

• LinearLayout!

• TableLayout!

• RelativeLayout

eee19.com

Eventos

• Definir um listener e registrá-lo com a View!

• Sobrecarregar um método de callback na View

eee19.com

Listeners// Create an anonymous implementation of OnClickListener private OnClickListener mCorkyListener = new OnClickListener() {     public void onClick(View v) {       // do something when the button is clicked     } }; !protected void onCreate(Bundle savedValues) {     ...     // Capture our button from layout     Button button = (Button)findViewById(R.id.corky);     // Register the onClick listener with the implementation above     button.setOnClickListener(mCorkyListener);     ... }

http://developer.android.com/

eee19.com

Listenerspublic class ExampleActivity extends Activity implements OnClickListener {     protected void onCreate(Bundle savedValues) {         ...         Button button = (Button)findViewById(R.id.corky);         button.setOnClickListener(this);     } !    // Implement the OnClickListener callback     public void onClick(View v) {       // do something when the button is clicked     }     ... } http://developer.android.com/

eee19.com

Intents

• Comunicação intra e inter app de um jeito amigável e inteligente!

• Serve para iniciar activities, services e broadcast receivers

eee19.com

Intents

• Possui um alvo facultativo!

• Se não tiver especificado alvo, o sistema encontra um!

• Pode executar uma Activity ou Service específico!

• IntentFilters

eee19.com

Intents

• Component name!

• Action!

• Data!

• Category!

• Extras!

• Flags

eee19.com

IntentsConstante Alvo AçãoACTION_CALL activity Inicia uma ligação

ACTION_EDIT activity Apresenta dados a serem editados

ACTION_MAIN activity Activity inicial

ACTION_SYNC activity Sincroniza dados com servidor

ACTION_BATTERY_LOW broadcast receiver Aviso de bateria fraca

ACTION_HEADSET_PLUG broadcast receiver Um fone de ouvido foi conectado ou desconectado

ACTION_SCREEN_ON broadcast receiver A tela foi ligada (acesa)

ACTION_TIMEZONE_CHANGED broadcast receiver Configurações de timezone modificadas

eee19.com

Intent filter

<intent-filter . . . >     <action android:name="com.example.project.SHOW_CURRENT" />     <action android:name="com.example.project.SHOW_RECENT" />     <action android:name="com.example.project.SHOW_PENDING" />     . . . </intent-filter>

<intent-filter . . . >     <data android:mimeType="video/mpeg" android:scheme="http" . . . />     <data android:mimeType="audio/mpeg" android:scheme="http" . . . />     . . . </intent-filter> http://developer.android.com/

eee19.com

http://developer.android.com/!!

http://developer.android.com/training/index.html!

eee19.com

Obrigado

• Twitter/ADN @douglasdrumond!

• www.eee19.com!

• gplus.to/douglasdrumond