Upgrade to Pro — share decks privately, control downloads, hide ads and more …

El desarrollador Android que saltó por la venta...

El desarrollador Android que saltó por la ventana y se largó

Trucos, librerías y consejos para hacer de tu vida con Android algo más sencillo.

Avatar for Alejandro Rodríguez Salamanca

Alejandro Rodríguez Salamanca

November 11, 2014

More Decks by Alejandro Rodríguez Salamanca

Other Decks in Programming

Transcript

  1. El desarrollador Android que saltó por la ventana y se

    largó. Alejandro Rodríguez Salamanca
  2. De qué no va esta charla. • No voy a

    enseñar a programar para Android.
  3. De qué sí va esta charla • Aprender cómo hacer

    las cosas. • Ahorrar tiempo en vuestros desarrollos. • Evitar que os entren ganas de tiraros por la ventana mientras desarrolláis esa app tan maravillosa.
  4. Genymotion • Se ejecuta sobre VirtualBox. • Windows, Mac y

    Linux. • Muuuuuucho más rápido que el emulador. • Algunas funciones son de pago :( • Plugin para Android Studio y Eclipse.
  5. Gradle • Gradle es una herramienta para automatizar la construcción

    de nuestros proyectos. • Basado en Groovy, que tiene una sintaxis similar a Java • Permite manejar las dependencias de una forma sencilla \o/
  6. Por qué usar librerías open source • Puedes aprender viendo

    cómo están hechas. • Están probadas. • Los errores suelen ser arreglados rápidamente. • Ahorran tiempo en tu desarrollo. • No debemos reinventar la rueda. • Importante: NO sirven para todo.
  7. ButterKnife View "injection" library para Android • Elimina llamadas a

    findViewById usando @InjectView. • Agrupa múltiples Views en una lista usando @InjectViews. Puedes realizar operaciones sobre todas ellas a la vez. • Puedes usar anotaciones como @OnClick.
  8. (Antes de) ButterKnife public class ExampleActivity extends Activity { TextView

    title; TextView summary; TextView name; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); title = (TextView) findViewById(R.id.title); summary = (TextView) findViewById(R.id.summary); name = (TextView) findViewById(R.id.name); title.setText(“Hey!”); } }
  9. (Con) ButterKnife public class ExampleActivity extends Activity { @InjectView(R.id.title) TextView

    title; @InjectView(R.id.summary) TextView summary; @InjectView(R.id.name) TextView name; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.inject(this); title.setText(“Hey!”); } }
  10. Picasso Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); • Cacheo automático en memoria y disco. •

    Transformaciones sencillas de las imágenes. • Manejo del reciclado de imágenes y cancelación de descargas automáticamente en los Adapters
  11. HTTP public static InputStream getInputStreamFromUrl(String url) { InputStream content =

    null; try { HttpClient httpclient = new DefaultHttpClient(); HttpResponse response = httpclient.execute(new HttpGet(url)); content = response.getEntity().getContent(); } catch (Exception e) { Log.("[GET REQUEST]", "Network exception", e); } return content; }
  12. • Llamar a ese método en un AsyncTask • Lanzar

    el AsyncTask • Tener en cuenta cambios en el dispositivo (rotación de la pantalla, salir de la Activity…) HTTP
  13. • Programación automática de las peticiones. • Múltiples conexiones de

    red simultáneas. • Fácil de personalizar y crear nuestras propias peticiones. • Priorizar peticiones. Volley
  14. RequestQueue queue = Volley.newRequestQueue(this); String url ="http://www.google.com"; StringRequest stringRequest =

    new StringRequest(Request.Method.GET, url, new Response.Listener() { @Override public void onResponse(String response) { // Response. } } , new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // Error } }); // Add the request to the RequestQueue. queue.add(stringRequest); Volley
  15. • Definimos nuestros endpoints en una interfaz Retrofit public interface

    GitHubService { @GET("/users/{user}/repos") List<Repo> listRepos(@Path("user") String user); }
  16. Retrofit RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint("https://api.github.com") .build(); GitHubService service

    = restAdapter.create(GitHubService.class); List<Repo> repos = service.listRepos("octocat"); • Lanzamos nuestra petición
  17. Buses de eventos • Podemos suscribir nuestras clases a ciertos

    eventos • Nos sirve para comunicar nuestros Fragments, Activities… con otras clases • Nos permiten desacoplar el código • No sustituyen a las interfaces, las complementan.
  18. EventBus • Definimos una clase, que será enviada. public class

    MessageEvent { public final String message; public MessageEvent(String message) { this.message = message; } }
  19. EventBus • Nos suscribimos en las clases que queramos recibir

    el evento @Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop() { EventBus.getDefault().unregister(this); super.onStop(); }
  20. EventBus • Enviamos el evento EventBus.getDefault().post(new MessageEvent("hello!")); • Lo recibimos

    // Called in the same thread (default) public void onEvent(MessageEvent event) { log(event.message); }
  21. EventBus // Called in Android UI's main thread public void

    onEventMainThread(MessageEvent event){ textField.setText(event.message); } // Called in the background thread public void onEventBackgroundThread(MessageEvent event){ saveToDisk(event.message); } // Called in a separate thread public void onEventAsync(MessageEvent event){ backend.send(event.message); }
  22. Listas • Es uno de los componentes más usados en

    las apps. • Problemas: ◦ Está pensado para contener un único tipo de elementos. ◦ No están pensados para contener elementos clickables ◦ Hay que reciclar vistas, nos pueden quedar Adapters enormes si queremos manejar varios tipos de elementos en una lista.
  23. Material, please. • Nuevas guías de diseño para los productos

    de Google. • Muy bien documentado. • Es bonito. • Sí, de verdad, es bonito. • Android es Android. No es iOS, ni Windows Phone. • Innova en tu diseño, pero no hagas que el usuario se sienta perdido.
  24. Scala/Kotlin/RxJava • No solo de Java vive Android. • Puedes

    usar otros lenguajes como Scala, Kotlin o RxJava • RxJava está ahora muy de moda. Programación reactiva. Basado en eventos.