¿Qué es Jetpack Compose?

Jetpack Compose es la biblioteca de IU de Android más reciente que ha tomado la plataforma de desarrollo móvil de Android por sorpresa. Con Jetpack Compose, los desarrolladores pueden construir aplicaciones de alta calidad y sofisticadas que son más fáciles de mantener y escalar. La introducción de Jetpack Compose representa un cambio significativo en la forma en que se crea la interfaz de usuario de una aplicación de Android. En lugar de trabajar con una jerarquía de vistas de Android, Jetpack Compose utiliza un enfoque de programación declarativa para definir la IU de una aplicación. Esto significa que los desarrolladores pueden escribir código que describe cómo debe verse la interfaz de usuario de una aplicación, en lugar de manipular directamente los objetos de vista. Jetpack Compose también viene con una serie de herramientas que facilitan el diseño y la personalización de la interfaz de usuario de una aplicación. Desde una amplia variedad de widgets personalizados hasta la capaci...

Parcelable en Español

Parcelable

Interfaz para clases cuya instancias pueden ser escritas y restauradas de un Parcel.

Parcel

Paquete, grupo o montón. Contenedor para un mensaje (data y referencias de objeto) que puede ser enviado a través de IBinder. 

Bien ¿y que hacemos con eso?

Cuando pasamos parámetros a un Intent, o un fragmento o actividad dentro de un Bundle podemos pasar todo un objeto, ¿cómo?  implementando Parcelable en nuestra clase.  Anteriormente utilizaba Serializable, pero es recomendable utilizar Parcelable  en vez de Serializable sencillamente porque es mucho más rápido. Se pueden leer este artículo de Philippe Breaul Ingeniero de Software en Google Parcelable vs Serializable para más  detalle sobre las diferencias de ambos.

Supongamos que vamos a enviar parámetros a un IntentService para un Login por ejemplo,

LoginRequest loginRequest = new LoginRequest(this,
                    mEmailView.getText().toString(),
                    mPasswordView.getText().toString());

Intent loginService = new Intent(this, LoginIntentService.class);
loginService.putExtra(LoginIntentService.PARAM_LOGIN, loginRequest);


El método putExtra acepta un Parcelable, en este caso tengo un objeto loginRequest con mi usuario y contraseña pero, para que eso se pueda hacer LoginRequest tiene que implementar Parcelable, así:


public class LoginRequest implements Parcelable {


    @SuppressWarnings("unused")
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
        @Override
        public LoginRequest createFromParcel(Parcel in) {
            return new LoginRequest(in);
        }

        @Override
        public LoginRequest[] newArray(int size) {
            return new LoginRequest[size];
        }
    };

    private String email;
    private String password;

    /**
     * Default private request
     */
    private LoginRequest() {
    }

    /**
     * Constructor of this class
     *
     * @param context  Android context
     * @param email    Email
     * @param password Password
     */
    public LoginRequest(Context context, String email, String password) {
        this.email = email;
        this.password = password;
        this.device = new Device(DeviceManager.getDeviceName(), DeviceManager.getDeviceID(context));
    }

    /**
     * Constructor for Parcel
     *
     * @param in in parce
     */
    private LoginRequest(Parcel in) {
        email = in.readString();
        password = in.readString();
        device = (Device) in.readValue(Device.class.getClassLoader());
    }


    /**
     * Implementation of describeContent of Parcelable interface
     *
     * @return 0
     */
    @Override
    public int describeContents() {
        return 0;
    }

    /**
     * WriteToParce implementation
     *
     * @param dest  destination
     * @param flags flags
     */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(email);
        dest.writeString(password);
        dest.writeValue(device);
    }
}

Los métodos del Parcelable  están en negritas y todos son importantes y necesarios. Se podría pensar que es mucho código, y lo es, más aún si tenemos muchos campos en nuestra clase. Afortunadamente Android Studio nos hace todo el trabajo. Vale mencionar que uso la versión 2.2 Beta.

Lo único que tenemos que hacer es escribir nuestra clase LoginRequest implements Parcelable y los miembros de la clase, algo así:



Nos va marcar que algo está mal, en Mac presionamos alt + enter en el nombre de la clase.



Seleccionamos Add Parcelable implementation y automáticamente nos genera todos los métodos necesarios.

Quedando como resultado 


Saludos, espero empiecen a utilizar Parcelable de ahora en adelante para pasar todo un objeto y no parámetro por parámetro como he visto en algunos códigos en Internet. 



Comentarios

Entradas más populares de este blog

¿Qué es Jetpack Compose?

Hacer la barra de status transparente en Android.

Solicitar permisos en Android en tiempo de ejecución más fácilmente