[flisol] android faixa branca (iniciando no android) – 2013
DESCRIPTION
Palestra ministrada no FLISOL Campinas 2013TRANSCRIPT
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
• onClick() → View.OnClickListener!
• onLongClick() → View.OnLongClickListener!
• onFocusChange() → View.OnFocusChangeListener!
• onKey() → View.OnKeyListener!
• onTouch() → View.OnTouchListener!
• onCreateContextMenu() → View.OnCreateContextMenuListener
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