Generalidades

Los problemas de Android más comunes: trampas de Android 🐭 🧀 | Por Begüm Yazıcı 👩🏻‍💻 | Abril de 2022

Hola a todos, espero que todo vaya bien!

En este artículo, explicaré los problemas comunes de Android y cómo podemos solucionarlos. Discutiré estos temas bajo 3 encabezados; núcleo, interfaz de usuario, red.

¡Empecemos! 🏁

Rotación de pantalla 🤸🏼‍♀

Los problemas de Android mas comunes trampas de Android
Foto de Lauren Mancke en Unsplash

¿Qué sucede cuando la pantalla gira? Antes de considerar esto, intentemos entender cómo Android maneja esto.

Cuando el usuario gira el teléfono La configuración de la actividad ha cambiado, por lo que el sistema operativo Android destruye la actividad y la vuelve a crear..

Detrás de escena; cuando la orientación del dispositivo cambia, primero la Actividad desaparece por un milisegundo, cuando onPause, onStopy onDestroy se llama el método.Después de unos milisegundos, la actividad se reiniciará y onCreate, onStarty onResume se llama el método.

1649731607 653 Los problemas de Android mas comunes trampas de Android
Foto de https://stackoverflow.com/questions/28954134

Como se muestra arriba, a medida que la pantalla gira, onCreate Llamar al método nuevamente significa que nuestros datos antiguos se pierden. Esta es una situación con la que nos encontramos a menudo al diseñar aplicaciones de Android. ¡Sin dudarlo, hay dos formas populares de lidiar con este problema!

  • Usando un modelo de vista: ver modelo Los cursos están diseñados para guardar y administrar datos relacionados con la interfaz de usuario También conserva los datos de los cambios de configuración, como la rotación de la pantalla. Es por eso que no tenemos que preocuparnos por las rotaciones de teléfonos cuando los usamos para seguir adelante.
1649731607 207 Los problemas de Android mas comunes trampas de Android
  • con uso onSaveInstanceState(): Podemos almacenar los datos en un paquete y utilizar onRestoreInstanceState método.
  • Tu lista > Pestaña Actividad Agregar android:configChanges="orientation|keyboardHidden|screenSize": Esto evita que se recree tu actividad cuando giras o cambias de orientación para que no se pierda ningún dato (se conservarán tus valores anteriores)

Comprobación nula de fragmento

El siguiente tema es verificar si se crea una actividad antes de agregar un fragmento usando el administrador de fragmentos.

¿Por qué necesitas comprobar savedInstanceState ¿Los parámetros están vacíos en onCreate antes de agregar un nuevo fragmento? — La respuesta está aquí 👉🏻 Los fragmentos se vuelven a adjuntar automáticamente cuando se recrea tu actividad, como después de la rotación de la pantalla u otros cambios de configuración.comprobando si savedInstanceState == null existir onCreate Asegúrese de no volver a agregar fragmentos que ya se hayan agregado por usted.

puedes usarlo findFragmentByTag o findFragmentById La función para obtener el fragmento. Si el método mencionado devuelve nulo, entonces el fragmento no existe. Si existe un fragmento, no tiene que crear un nuevo fragmento, ¡debe usar el fragmento existente!

Fragment fragmentA = fragmentManager.findFragmentByTag("frag1");
if (fragmentA == null) {
// not exist
} else {
// fragment exist
}

Por cierto, no necesita declarar referencias de variables a instancias de Fragmento. En su lugar, guarde su fragmento por etiqueta y luego consígalo. como eso;

comunicarse con fragmentos

  • Pase datos entre fragmentos definiendo interfaces: La forma más común de pasar datos entre fragmentos es definiendo una interfaz con métodos implementados por la actividad del contenedor. Puede pensar que tenemos un elemento de lista y un fragmento de los detalles del elemento. El fragmento de la lista llama al método implementado por la actividad y le pasa los datos (identificación del elemento). El método en la Actividad encuentra el fragmento de detalles del elemento y establece los datos recibidos del fragmento del elemento llamando al método setter definido en el fragmento de detalles.

¡Veamos cómo hacerlo!

Primero, creé una interfaz llamada Communicator con un método sendSelectedItemId Enviamos el id del elemento seleccionado del fragmento ListItem.

reemplazamos fragmento de elemento de lista y fragmento de detalle en el interior actividades principales como eso;

en nuestro La lista de elementos segmentoes hora de nuestro fragmento de detalle y mostrarlo en la pantalla.

  • Use ViewModel para pasar datos entre fragmentos: Una de las mejores soluciones para pasar datos entre dos fragmentos de una actividad utilizando ViewModel y LiveData.

Veamos un ejemplo;

Cuando el usuario haga clic en el botón, FragmentA actualizará ViewModel con datos en vivo. El código es el siguiente;

Cualquiera que esté observando los datos en vivo seleccionados de SharedViewModel ahora puede reaccionar a los cambios en los datos en vivo. Si FragmentB quisiera notar el cambio, se vería así:

La actividad también observa cambios;

  • Oyente de resultados de fragmentos: ¡La mejor explicación que puede encontrar sobre cómo usar fragmentResultListener para pasar resultados entre fragmentos, lea esta documentación!

Imaginemos que ha comenzado a desarrollar una aplicación y va a mostrar datos en la interfaz de usuario. ¿A qué tipo de situación nos enfrentaremos? 🧐

¡Veamos la primera escena!

sin conexión a Internet

Hiciste tu tarea, obtuviste los datos y los mostraste en tu aplicación, todo bien, pero ¿qué pasa si un usuario de Internet bajar?

Considérese usuario Bajo estas circunstancias. ¿Qué quieres ver en la pantalla? ¿No? datos anteriores? ¿Noticias relacionadas? …

No creo que nadie quiera ver nada en la pantalla.Podríamos mostrar información relevante, lo que creo que es mejor que no mostrar nada en este caso, pero mi enfoque es «mostrar Anterior datos! «¡Veamos cómo hacerlo!

Primero, para hacerlo, el usuario debe usar la aplicación Al menos una vez Cuando estamos conectados a Internet; de lo contrario, no podemos porque necesitamos obtener los datos para guardarlos.

Cuando el usuario inicia la aplicación por primera vez, todos los datos se guardan en la base de datos (por ejemplo, SQLite, habitaciones, etc.). Si el usuario tiene una conexión a Internet, los datos previamente almacenados en la base de datos se eliminarán y luego los datos nuevos (actualizaciones) se guardarán en la base de datos una y otra vez…

Genial porque queremos mantener Los últimos datos. Podemos mostrar los datos almacenados en nuestra aplicación cuando el usuario no tiene conexión a Internet.

¡Pero esté atento, porque debemos prestar atención a los datos que mostramos! Por ejemplo, puede tener datos de ropa (imágenes, detalles, precios, tallas, etc.) ¿Qué campo quieres mostrar? yo prefiero no Los precios de la ropa se muestran, ya que pueden cambiar sin conexión a Internet. Solo compartiré imágenes, detalles y dimensiones de la ropa, esta es información estática.

¿Qué pasa si sus datos están vacíos?

Repasemos este escenario.Obtuvo los datos y los enumeró en la interfaz de usuario y todo parece estar organizado, pero si algunos datos están ¿Valor nulo? ! Como usuario, ¿qué le gustaría ver en la pantalla?

En realidad, como usuario, prefiero ver algo que No!
Como desarrollador, si los datos de la imagen están vacíos, mostraré la imagen de información y, para los datos de texto, mostraré el texto de información, p. «Lo sentimos, no pudimos encontrar información sobre el tamaño» o «N/A»

Recuerde, no administramos los datos del servicio, pero podemos mostrarlos más claramente.

Puedes ver en este código cómo lo manejo 👇🏻

Estado de la interfaz de usuario (carga, éxito, error)

1649731607 120 Los problemas de Android mas comunes trampas de Android

Hicimos una solicitud al servicio y estamos esperando una respuesta, por lo que, ¿Cuál es su enfoque en este caso (hasta que obtenga una respuesta del servicio)? ¿Esperará una respuesta o informará al usuario de la situación?

si yo fuera un usuariosi no veo un cambio en la pantalla hasta que reciba una respuesta del servicio, asumiré que la aplicación está congelada y no funcionará, y la cerraré.

Igual que antes desarrollador, en este caso, haría lo siguiente: primero, independientemente de la respuesta del servicio (Éxito, Error), debemos proporcionar el mensaje que el usuario debe esperar, es decir, el mensaje de carga. Si el resultado es un error, debemos mostrar el mismo mensaje de error al usuario. Si los resultados de nuestro servicio son exitosos, debemos presentar nuestros datos.

En mi ejemplo, utilicé la arquitectura MVVM, por lo que actualicé el estado de mi interfaz de usuario en la clase ProductViewModel.Cuando se activa el estado de la interfaz de usuario, también llamo bindApiStatus Características.

En este caso, otro problema es cargando estado. Hacemos una solicitud al servicio, y el proceso desde ese punto hasta que recibimos una respuesta es nuestro ciclo de vida de estado de carga.

Entonces, digamos que tenemos un escenario donde tenemos productos y los enumeramos y cuando el usuario hace clic en uno de ellos, lo lleva a la página de detalles del producto. ¿Dónde debo poner el estado de carga en este caso? 🧐 ¡Por favor comparte tus pensamientos en los comentarios!

Fijación de SSL

1649731607 25 Los problemas de Android mas comunes trampas de Android
Referencias de techuz.com

¿Qué es SSL? — Representante fijo SSL capa de enlace seguro.SSL es una tecnología de seguridad estándar utilizada para establecer enlaces encriptados entre redes cliente y un servidorUn certificado SSL tiene un par de claves que es listado y privado llave.

¿Por qué necesita la fijación de certificados SSL? — La fijación de SSL permite que las aplicaciones confíen solo en datos válidos o predefinidos Certificado o Llave pública. Los desarrolladores de aplicaciones utilizan Fijación de SSL La tecnología como capa adicional de seguridad para el tráfico de aplicaciones.Por lo general, las aplicaciones confían en la costumbre Certificado y permitir que las aplicaciones intercepten el tráfico.

Fijar un conjunto de certificados de confianza evita que los atacantes analicen el tráfico del servidor.

He agregado algunos artículos sobre SSL Pinning a continuación Referirse a Le recomiendo que lea la sección. ¡Puedes aprender más aqui!

ProGuard-Android

ProGuard es un programa que puede ayudarte disminuir el zoom, ofuscary mejoramiento tu codigo.Es muy eficaz para reducir el tamaño total de una aplicación de Android y para eliminar clases y métodos no utilizados que contribuyen a la naturaleza inherente de una aplicación de Android. 64k Restricciones del método.Por lo tanto, ProGuard a menudo se recomienda para desarrollo y producción, especialmente para más grande proyecto.

ProGuard se puede especificar especificando Alejar habilitado alcance.Muy recomendable si planeas usarlo para ProducciónTambién puede utilizar su desarrollarSi no prueba a fondo ProGuard en compilaciones de desarrollo, puede experimentar bloqueos inesperados o aplicaciones que no funcionan como se esperaba.

El SDK de Android incluye ProGuard y un archivo de configuración predeterminado llamado proguard-android.txtIncluir este archivo es fundamental porque contiene ajustes de configuración explícitos, como especificar explícitamente que no se deben eliminar todos los métodos de obtención y configuración de View. El archivo que utilizará para la configuración es proguard-rules.pro.

LEER  Notas sobre el uso de las clases de otros módulos como argumentos de función componible en Jetpack Compose | Por takahirom | Marzo de 2022

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba