67
Começando com Android Ivan de Aguirre @IvAguirre [email protected]

Começando com Android

  • Upload
    dextra

  • View
    621

  • Download
    0

Embed Size (px)

DESCRIPTION

Palestra apresentada por Ivan de Aguirre no AndroidDay 2013.

Citation preview

Page 1: Começando com Android

Começando com Android

Ivan de Aguirre@IvAguirre

[email protected]

Page 2: Começando com Android

Agenda• Parte1:

o Fragmentação.o Aplicações Nativas ou Híbridas?o Interfaceo Android 4.3

• Parte2:o Como o Android gerencia recursoso Threadingo Memory leaks

Page 3: Começando com Android

Fragmentação

Page 4: Começando com Android

Fragmentação - níveis de API

4.0.3 - 4.0.4 API 15

Ice Cream Sandwich

Page 5: Começando com Android

Fragmentação - níveis de API

4.1 - API 164.2 - API 174.3 - API 18

Jelly Bean

Page 6: Começando com Android

Fragmentação - níveis de API

android:minSDKVersion

Page 8: Começando com Android

Fragmentação - níveis de API

Google Play Developer Console

Page 9: Começando com Android

Fragmentação - níveis de API

android:minSDKVersion=”10”

Page 10: Começando com Android

Fragmentação - níveis de API

android:minSDKVersion=”10”

Android Support Library

Page 13: Começando com Android

Fragmentação - tela - Screen Size

small, normal, large, xlarge, sw600dp, w1024dp, h720dp, ...

Page 14: Começando com Android

Fragmentação - tela - Density

dpi = dots per inch (ldpi, mdpi, hdpi, xhdpi)

dp = density-independent pixelsp = scale-independent pixel

wrap_contentmatch_parent

Page 15: Começando com Android

<Button android:id="@+id/btn_ok" android:layout_width="match_parent" android:layout_height="100dp" android:text="@android:string/ok" />

Page 16: Começando com Android

Aplicações Nativas X Híbridas

Android, iOS, Windows Phone...

Page 17: Começando com Android

Aplicações Nativas X Híbridas

Android, iOS, Windows Phone...

Custo-benefício de três aplicações > Custo de uma aplicação híbrida ?

Page 18: Começando com Android

Aplicações Nativas X Híbridas

Aplicações Nativas

X

Aplicações Híbridas:

+ JavaScriptcódigo nativo +

Page 19: Começando com Android

Aplicações Nativas X Híbridas

“You can write amazing Web 2.0 and Ajax apps that look exactly and behave exactly like apps on the iPhone. (...) And guess what? There’s no SDK that you need! You’ve got everything you need if you know how to write apps using the most modern web standards to write amazing apps for the iPhone today. So developers, we think we’ve got a very sweet story for you. You can begin building your iPhone apps today.”

Steve Jobs, 2007

Page 20: Começando com Android

Aplicações Nativas X Híbridas

“You can write amazing Web 2.0 and Ajax apps that look exactly and behave exactly like apps on the iPhone. (...) And guess what? There’s no SDK that you need! You’ve got everything you need if you know how to write apps using the most modern web standards to write amazing apps for the iPhone today. So developers, we think we’ve got a very sweet story for you. You can begin building your iPhone apps today.”

Steve Jobs, 2007

Só que não…

Page 21: Começando com Android

Aplicações Nativas X HíbridasMartin Fowler, Developing Software for Multiple Mobile

Devices.http://martinfowler.com/articles/multiMobile/

Page 22: Começando com Android

Aplicações Nativas X HíbridasMartin Fowler, Developing Software for Multiple Mobile

Devices.http://martinfowler.com/articles/multiMobile/

“but cross-platform failed for desktop, so why should we

expect it to succeed for mobile?”

Page 23: Começando com Android

Aplicações Nativas X HíbridasMartin Fowler, Developing Software for Multiple Mobile

Devices.http://martinfowler.com/articles/multiMobile/

“To translate to all platforms, you can only use what all platforms support - which means you can only use a subset of each platform's

behavior.”

“but cross-platform failed for desktop, so why should we

expect it to succeed for mobile?”

Page 24: Começando com Android

Aplicações Nativas X HíbridasMartin Fowler, Developing Software for Multiple Mobile

Devices.http://martinfowler.com/articles/multiMobile/

“To translate to all platforms, you can only use what all platforms support - which means you can only use a subset of each platform's

behavior.”

“but cross-platform failed for desktop, so why should we

expect it to succeed for mobile?”

“...UI translation leads you to... The Uncanny Valley”

Page 25: Começando com Android

Aplicações Nativas X Híbridas

“Javascript is too slow for mobile app use in 2013 (e.g., for photo editing

etc.). It’s slower than native code by about 5...“

http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/

Page 26: Começando com Android

Aplicações Nativas X Híbridas

Se sua aplicação mobile for um diferencial para o seu negócio considere fazer

nativa.

Page 27: Começando com Android

Aplicações Nativas X Híbridas

Que tal site web otimizado para mobile, que execute no Browser?

Page 29: Começando com Android
Page 30: Começando com Android
Page 31: Começando com Android
Page 32: Começando com Android
Page 33: Começando com Android
Page 34: Começando com Android
Page 35: Começando com Android

• Bluetooth Low Energy (Smart Ready).

• Media DRM.

• Interfaces Java para OpenGL ES

3.0.

• Android key store.

• Hardware credential storage.

Android 4.3

Page 36: Começando com Android
Page 37: Começando com Android

Parte 2

Algumas boas práticas.Sim... vamos ver um pouco

de código agora :)

Page 38: Começando com Android

Gerência de Recursos

0 100%

A B C

Page 39: Começando com Android

Gerência de Recursos

0 100%

B C

Page 40: Começando com Android

Gerência de Recursos

0 100%

B C D

Page 41: Começando com Android

Gerência de Recursos

0 100%

C D

Page 42: Começando com Android

Gerência de Recursos

0 100%

C D A

Page 44: Começando com Android

Gerência de Recursos

Fragment:

onSaveInstanceState(Bundle state)

setRetainInstance(boolean retain)

onCreate(Bundle state)

onCreateView(LayoutInflater inflater

,ViewGroup group, Bundle state)

onActivityCreated(Bundle state)

Page 45: Começando com Android

Gerência de Recursos

onCreateonStartonResume

Page 46: Começando com Android

Gerência de Recursos

onCreateonStartonResume

Page 47: Começando com Android

Gerência de Recursos

onCreateonStartonResume

onSaveInstanceStateonPauseonStoponDestroy

Page 48: Começando com Android

Gerência de Recursos

onCreateonStartonResume

onCreateonStartonResume

onSaveInstanceStateonPauseonStoponDestroy

Page 49: Começando com Android

Gerência de Recursos

onCreateonStartonResume

onCreateonStartonResume

onSaveInstanceStateonPauseonStoponDestroy State

Page 50: Começando com Android

Thread de UIpaint

onClickpaintpaint

onReceiveonItemSelected

paintonPauseonStoppaint

onDestroy

Page 51: Começando com Android

Thread de UIpaint

onClickpaintpaint

onReceiveonItemSelected

paintonPauseonStoppaint

onDestroy

ANR

Page 52: Começando com Android

Thread de UIpaint

onClickpaintpaint

onReceiveonItemSelected

paintonPauseonStoppaint

onDestroy

Page 53: Começando com Android

Thread de UIpaint

onClickpaintpaint

onReceiveonItemSelected

paintonPauseonStoppaint

onDestroy

Worker Thread

Page 54: Começando com Android

Thread de UIpaint

onClickpaintpaint

onReceiveonItemSelected

paintonPauseonStoppaint

onDestroy

Worker Thread

Page 55: Começando com Android

Threading

AsyncTask

Page 56: Começando com Android

Threadingpublic class Activity { public void onCreate(Bundle

savedInstance) { ... DownloadTask task = new

DownloadTask(); task.execute(); ... }}

Page 57: Começando com Android

Threading

Loader

Page 58: Começando com Android

ThreadingAsyncQueryHandler

IntentService

Handler

java.lang.Thread #sqn

Page 59: Começando com Android

Sincronização

SyncAdapter

GCM

Polling

Page 61: Começando com Android

Memory Leak - Problemapublic class Util { private Context context; private static Util singleton;

public static Util get(Context context) { if (singleton == null) { this.singleton = new Util(context); } return singleton;

}

public String getHello() { return context.getString(R.string.hello);

}}

Page 62: Começando com Android

Memory Leak - Problema

public class MyActivity extends Activity { public void onCreate(Bundle

savedInstance) { ... Util util = Util.get(this); String hello =

util.getHello(); ...}

Page 63: Começando com Android

Memory Leak - Solução 1

public static Util get(Context context) { if (singleton == null) { Context ctx = context .getApplicationContext(); this.singleton = new Util(ctx);}return singleton;

}

Page 64: Começando com Android

Memory Leak - Solução 2

public class Util {

public static String getHello(Context ctx) { return ctx.getString( R.string.hello);}

}

Page 65: Começando com Android

Memory Leak - Solução 2public class MyActivity { public void onCreate(Bundle

savedInstance) { ... String hello = Util.getHello(this); ...}

}

Page 66: Começando com Android

Perguntas?

Page 67: Começando com Android

Muito Obrigado!

Ivan de Aguirre@IvAguirre

[email protected]