[android devcamp] android bootcamp – 2012
DESCRIPTION
Básico de Android apresentado no Bootcamp promovido pelo GTUG Campinas em conjunto com GTUG São PauloTRANSCRIPT
eu.about()
eu.about()
• Técnico
eu.about()
• Técnico
• (pseudo)Matemático
eu.about()
• Técnico
• (pseudo)Matemático
• Bacharel em Ciência da Computação
eu.about()
• Técnico
• (pseudo)Matemático
• Bacharel em Ciência da Computação
• Analista de software no Instituto de Pesquisas Eldorado
@Eldorado
Linux Kernel
Bibliotecas
Framework
Aplicações
Dalvik
@Eldorado
Linux Kernel
Bibliotecas
Framework
Aplicações
Dalvik
BP
http://www.flickr.com/photos/natalielucier/3619749009/
Hoje
http://www.gtugs.org/
http://www.flickr.com/photos/donkeyhotey/5666071828/
Ferramentas
Pré-requisitos
• JDK!
• Android SDK
Sistema Operacional
• Linux!
• Mac OS X (Intel)!
• Windows XP ou superior
Ferramentas
Ferramentas
Ferramentas
Ferramentas
Ferramentas
Ferramentas
• Remote debugger
• logcat
• DDMS
Ferramentas
Ferramentas
Ferramentas
Ferramentas
Ferramentas
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
Arquitetura
Arquitetura
Linux Kernel
Arquitetura
Linux Kernel
Bibliotecas Dalvik
Arquitetura
Linux Kernel
Bibliotecas
Framework
Dalvik
Arquitetura
Linux Kernel
Bibliotecas
Framework
Aplicações
Dalvik
Arquitetura
Linux Kernel
Bibliotecas
Framework
Aplicações
Dalvik
Dissecando as Aplicações
Activity
Service
Content Provider
Intent
Intent
Intent
Intent
Intent
Broadcast Receiver
• Não possui interface (com usuário)!
• Roda em segundo plano!
• Reage a mensagens de broadcast!
• Exemplo: carga de bateria
Activity
• Interface!
• Um objetivo!
• Várias por aplicativo!
• Pode iniciar outras activities
Activity
• 3 estados: ativa, em pausa e parada!
• 3 ciclos de vida!
• pode morrer a qualquer momento se não estiver ativa
Activity
ActivityonCreate()
ActivityonCreate()
onStart()
ActivityonCreate()
onStart()
onResume()
ActivityonCreate()
onStart()
onResume()
em execução
ActivityonCreate()
onStart()
onResume()
em execução
onPause()
ActivityonCreate()
onStart()
onResume()
em execução
onPause()
ActivityonCreate()
onStart()
onResume()
em execução
onPause()
Primeiro plano
ActivityonCreate()
onStart()
onResume()
em execução
onPause()
onStop()
Primeiro plano
ActivityonCreate()
onStart() onRestart()
onResume()
em execução
onPause()
onStop()
Primeiro plano
ActivityonCreate()
onStart() onRestart()
onResume()
em execução
onPause()
onStop()
Primeiro plano
ActivityonCreate()
onStart() onRestart()
onResume()
em execução
onPause()
onStop()
Primeiro plano
Visível
ActivityonCreate()
onStart() onRestart()
onResume()
em execução
onPause()
onStop()
onDestroy()
Primeiro plano
Visível
ActivityonCreate()
onStart() onRestart()
onResume()
em execução
onPause()
onStop()
onDestroy()
shutdown
Primeiro plano
Visível
ActivityonCreate()
onStart() onRestart()
onResume()
em execução
onPause()
onStop()
onDestroy()
shutdown
Primeiro plano
Visível
Ciclo de vida completo
Multitarefa
Multitarefa
Multitarefa
onCreate()
Multitarefa
onPause()
Multitarefa
Multitarefa
onResume()
Multitarefa
onPause()
Multitarefa
onStop()
Multitarefa
onStop() onCreate()
Multitarefa
onStop() onCreate()
onPause()
Multitarefa
onStop() onCreate()
onStop()
onPause()
Multitarefa
onStop() onCreate()
onStop()
onPause()
Multitarefa
onStop() onCreate() onCreate()
onStop()
onPause()
Multitarefa
onRestart()
onStop() onCreate() onCreate()
onStop()
onPause()
Multitarefa
onStart()
onRestart()
onStop() onCreate() onCreate()
onStop()
onPause()
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
UI
• Hierarquia de ViewGroups e Views
View Group
ViewView Group View
View ViewView
http://developer.android.com/guide/topics/ui/how-android-draws.html
Layout<?xml&version="1.0"&encoding="utf98"?>&<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/
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/
Layout
• FrameLayout!
• LinearLayout!
• TableLayout!
• RelativeLayout
Eventos
• Definir um listener e registrá-lo com a View!
• Sobrecarregar um método de callback na View
Listeners
• onClick() → View.OnClickListener!
• onLongClick() → View.OnLongClickListener!
• onFocusChange() → View.OnFocusChangeListener!
• onKey() → View.OnKeyListener!
• onTouch() → View.OnTouchListener!
• onCreateContextMenu() → View.OnCreateContextMenuListener
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/
Listeners
public&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/
Intents
• Comunicação intra e inter app de um jeito amigável e inteligente!
• Serve para iniciar activities, services e broadcast receivers
Intents
• Possui um alvo facultativo!
• Se não tiver especificado alvo, o sistema encontra um!
• Pode executar uma Activity ou Service específico!
• IntentFilters
Intents
• Component name!
• Action!
• Data!
• Category!
• Extras!
• Flags
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
Intent filter
<intent9filter&.&.&.&>&&&&&<action&android:name="com.example.project.SHOW_CURRENT"&/>&&&&&<action&android:name="com.example.project.SHOW_RECENT"&/>&&&&&<action&android:name="com.example.project.SHOW_PENDING"&/>&&&&&.&.&.&</intent9filter>
<intent9filter&.&.&.&>&&&&&<data&android:mimeType="video/mpeg"&android:scheme="http"&.&.&.&/>&&&&&&<data&android:mimeType="audio/mpeg"&android:scheme="http"&.&.&.&/>&&&&&.&.&.&</intent9filter> http://developer.android.com/
http://developer.android.com/ !
http://developer.android.com/resources/browser.html?tag=tutorial
www.slideshare.net/douglasdrumond/
Obrigado