Evolución Android - DroidconMad 2014

55
Evolución Android Del framework a la supervivencia del más fuerte

Transcript of Evolución Android - DroidconMad 2014

Page 1: Evolución Android - DroidconMad 2014

Evolución Android Del framework a la supervivencia del

más fuerte

Page 2: Evolución Android - DroidconMad 2014

1. Origen 2. Extinción 3. Evolución

Agenda

Page 3: Evolución Android - DroidconMad 2014

1. Origen

Page 4: Evolución Android - DroidconMad 2014

Rubén Serrano Núñez (@Akelael) Lead Android Developer @RedboothHQ

Page 5: Evolución Android - DroidconMad 2014
Page 6: Evolución Android - DroidconMad 2014

Redbooth Beta Redbooth

Page 7: Evolución Android - DroidconMad 2014

WTF!

Page 8: Evolución Android - DroidconMad 2014

Creacionista

Page 9: Evolución Android - DroidconMad 2014
Page 10: Evolución Android - DroidconMad 2014

Evolucionista

Page 11: Evolución Android - DroidconMad 2014
Page 12: Evolución Android - DroidconMad 2014

¿Creacionistas vs

Evolucionistas?

Page 13: Evolución Android - DroidconMad 2014

“It’s the maintenance!”

Page 14: Evolución Android - DroidconMad 2014

2. Extinción

Page 15: Evolución Android - DroidconMad 2014

All-in-one Application

Page 16: Evolución Android - DroidconMad 2014

public class Application extends android.app.Application { private static Gson gson; private Map<Long, Integer> mRoles; private Session mSession; private File mCacheDir; private NotificationManager mNotificationManager; private int mNumberNotifications; ! public static Session getSession() { return instance.mSession; }

public static String getGCMToken() { AccountManager am = AccountManager.get(Application.getContext()); return am.getUserData(Application.getSession().getUser(), AccountAuthenticator.GCM_TOKEN); } public static File getCacheDirectory() { return instance.mCacheDir; }

Page 17: Evolución Android - DroidconMad 2014

Lo puse todo en Application y …

¡Quita eso de ahí, guarro!

Page 18: Evolución Android - DroidconMad 2014

Ahora si, ahora no

Page 19: Evolución Android - DroidconMad 2014

Ahora si, ahora no: Relative Layout

Page 20: Evolución Android - DroidconMad 2014

Ahora si, ahora no:

Enums vs Static Final Fields

Page 21: Evolución Android - DroidconMad 2014

Ahora si, ahora no: ViewHolder

Page 22: Evolución Android - DroidconMad 2014

private static class ViewHolder { public TextView textView; public ImageView imageView; } !@Overridepublic View getView(int position, View convertView, ViewGroup parent) { View view = convertView; ViewHolder viewHolder; if (view == null) { view = inflater.inflate(R.layout.item, parent, false); viewHolder = new ViewHolder(); viewHolder.textView = (TextView) view.findViewById(R.id.text); viewHolder.imageView = (ImageView) view.findViewById(R.id.image); view.setTag(viewHolder); } viewHolder = (ViewHolder) view.getTag(); viewHolder.textView.setText("Random string"); viewHolder.imageView.setBackgroundColor(R.color.black); return view; }

ViewHolder

Page 23: Evolución Android - DroidconMad 2014

@Overridepublic View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { view = inflater.inflate(R.layout.item, parent, false); } ((TextView) view.findViewById(R.id.text)).setText(“Random string"); ((ImageView) view.findViewById(R.id.image)).setBackgroundColor(R.color.black); return view; }

No Holder

Page 24: Evolución Android - DroidconMad 2014

Ahora…

ActionBarCompat

Nested Fragments

Navigation drawer

Native Pull-to-Refresh

Page 25: Evolución Android - DroidconMad 2014

Si lo recomienda

Page 26: Evolución Android - DroidconMad 2014

Juguemos…

• Descargar datos de un servidor

• Parser JSON

• Guardar datos en la BBDD

• Recuperar datos de la BBDD

• Mostrar datos en la pantalla

Page 27: Evolución Android - DroidconMad 2014

• Descargar datos de un servidor

• Parser JSON

• Guardar datos en la BBDD

• Recuperar datos de la BBDD

• Mostrar datos en la pantalla

Juguemos…

Page 28: Evolución Android - DroidconMad 2014

God Activity

Page 29: Evolución Android - DroidconMad 2014

startManagingCursor(Cursor c)

Page 30: Evolución Android - DroidconMad 2014

God Fragment

Page 31: Evolución Android - DroidconMad 2014

“Una Activity para gobernarlos a todos; una Activity para encontrarlos; una Activity para atraerlos a todos y atarlos a las tinieblas”

- El Señor de los Fragments

Page 32: Evolución Android - DroidconMad 2014

SauronActivity

Page 33: Evolución Android - DroidconMad 2014

Clean code

vs

Lengua Oscura de Mordor

Page 34: Evolución Android - DroidconMad 2014

AsyncTask

Page 35: Evolución Android - DroidconMad 2014

AsyncTask + startManagingCursor

Page 36: Evolución Android - DroidconMad 2014

Loaders!

Page 37: Evolución Android - DroidconMad 2014

LoaderCallbacks<Cursor> callback = new LoaderCallbacks<Cursor>() { @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { return new CursorLoader(context, uri, null, null, null, null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { adapter.swapCursor(data); } @Override public void onLoaderReset(Loader<Cursor> loader) { }};

LoaderCallbacks

Page 38: Evolución Android - DroidconMad 2014

ContentProvider

Page 39: Evolución Android - DroidconMad 2014

SyncAdapter

Page 40: Evolución Android - DroidconMad 2014

¿Cuándo?

Page 41: Evolución Android - DroidconMad 2014

3. Evolución

Page 42: Evolución Android - DroidconMad 2014
Page 43: Evolución Android - DroidconMad 2014

SOLID

Page 44: Evolución Android - DroidconMad 2014

Model View Presenter

Page 45: Evolución Android - DroidconMad 2014

Unit testing

Page 46: Evolución Android - DroidconMad 2014

Test Driven Development

Page 47: Evolución Android - DroidconMad 2014

Ports & Adapters (Hexagonal

Architecture)

Page 48: Evolución Android - DroidconMad 2014
Page 49: Evolución Android - DroidconMad 2014

It is not the strongest of the species that survives, nor the most intelligent, but rather the one most adaptable to change.

Charles Darwin

Page 50: Evolución Android - DroidconMad 2014

It is not the strongest of the species that survives, nor the most intelligent, but rather the one most adaptable to change.

Charles Darwin

Page 51: Evolución Android - DroidconMad 2014

Espíritu crítico

Page 52: Evolución Android - DroidconMad 2014

Código mantenible

(y legible)

Page 53: Evolución Android - DroidconMad 2014

Remember!

Page 54: Evolución Android - DroidconMad 2014

¡Muchas gracias!

Page 55: Evolución Android - DroidconMad 2014

Q & ARubén Serrano Núñez

@Akelael

plus.google.com/+RubénSerrano