1. Siga las pautas de diseño de Android
2. Manténgase al día con las últimas tendencias
3. Escuchar la entrada del usuario
4. Sumérgete en Android
5. Desarrollar para múltiples dispositivos
6. Optimiza tus aplicaciones
7. Limite los permisos requeridos
- ¿Cuál es la diferencia entre una aplicación nativa móvil y una multiplataforma?
- Cómo crear una aplicación sin conocimiento o experiencia previa
- ¿Cómo pueden las aplicaciones móviles empresariales aumentar el ROI?
- ¿Qué tan difícil sería hacer que una aplicación se venda por millones?
- He estado leyendo mucho acerca de que Adobe no planea apoyar activamente Flash en dispositivos móviles, dado el crecimiento significativo en el uso de dispositivos móviles para navegar por la web, ¿por qué dejarían de respaldar este mercado?
8. Respeta a tus usuarios
9. Diviértete
—Consejos para aplicaciones más eficientes—
Consejo 1. Cómo descargar operaciones en hilos en segundo plano
Dado que, de manera predeterminada, todas las operaciones en una aplicación se ejecutan en el subproceso principal (subproceso de interfaz de usuario) en primer plano, la capacidad de respuesta de la aplicación puede verse afectada, lo que provocará inminentemente bloqueos, bloqueos e incluso errores del sistema.
Para reforzar la capacidad de respuesta, debe cambiar las tareas de larga ejecución (por ejemplo, operaciones de red o de base de datos, cálculos complejos) del hilo principal de una aplicación a un hilo de fondo separado. La forma más efectiva de lograr esta tarea es a nivel de clase. Puede usar la clase AsyncTask o la clase IntentService para organizar el trabajo en segundo plano. Una vez que ha implementado un IntentService, se inicia cuando es necesario y maneja las solicitudes (Intents) utilizando un subproceso de trabajo.
Cuando use IntentService, debe considerar las siguientes limitaciones:
- Esta clase no coloca los resultados en la interfaz de usuario, por lo que para mostrar los resultados a los usuarios use Actividad.
- Solo se procesa una solicitud a la vez.
- Cualquier procesamiento de solicitud no puede ser interrumpido.
Consejo 2. Cómo evitar ANR y mantenerse receptivo
El mismo enfoque de descarga de operaciones de larga duración desde el hilo de la interfaz de usuario salvará a sus usuarios del cuadro de diálogo “La aplicación no responde” (ANR). Lo que debe hacer es crear un subproceso de trabajo en segundo plano extendiendo AsyncTask e implementando el método doInBackground ().
Otra opción es crear una clase Thread o HandlerThread propia. Tenga en cuenta que, a menos que especifique la prioridad de “fondo” para el subproceso, ralentizará la aplicación, ya que la prioridad predeterminada del subproceso es la misma que para el subproceso de la interfaz de usuario.
Consejo 3. Cómo iniciar consultas en hilos separados
La visualización de datos no es inmediata, aunque puede sujetarlos mediante el uso de objetos CursorLoader, lo que permite no distraer a Activity de interactuar con un usuario mientras la consulta se procesa en segundo plano.
Armado con este objeto, su aplicación iniciará un subproceso de fondo separado para cada consulta de ContentProvider y devolverá los resultados a la Actividad desde la que se llamó a la consulta solo cuando finalice la consulta.
Consejo 4. ¿Qué más puedes hacer?
- Use StrictMode para detectar operaciones potencialmente largas que realiza en el hilo de la interfaz de usuario.
- Use herramientas especiales, ig Systrace, Traceview, para encontrar cuellos de botella en la capacidad de respuesta de su aplicación.
- Mostrar progreso a los usuarios con una barra de progreso.
- Muestre pantallas de bienvenida si la configuración inicial lleva mucho tiempo.
Optimización de la vida útil de la batería del dispositivo.
No podemos culpar a los usuarios por desinstalar enojado aplicaciones que abusan de la duración de la batería. Las principales amenazas para la duración de la batería son:
- Despertos regulares para actualizaciones
- Transferencia de datos a través de EDGE y 3G
- Análisis de datos textuales, expresiones regulares sin JIT
Consejo 5. Cómo optimizar problemas de red
- Haga que su aplicación omita operaciones si no hay conexión; actualice solo si 3G o WiFi está conectado y no hay roaming.
- Elija un formato de datos compacto, por ejemplo, formatos binarios que combinen texto y datos binarios en una sola solicitud.
- Use un analizador eficiente; considere elegir analizadores de flujo en lugar de analizadores de árbol.
- Para una experiencia de usuario más rápida, reduzca los tiempos de ida y vuelta al servidor.
- Cuando sea posible, use bibliotecas GZIP de marco para datos de texto para aprovechar al máximo los recursos de la CPU.
Consejo 6. Cómo optimizar las aplicaciones que funcionan en primer plano
- Al diseñar wakelocks, establezca el nivel más bajo posible.
- Para evitar los costos de la batería causados por posibles errores que podría haber pasado por alto, use tiempos de espera específicos.
- Habilite Android: keepScreenOn.
- Además de GC (recolección de basura), considere reciclar objetos Java manualmente, por ejemplo, XmlPullParserFactory y BitmapFactory; Matcher.reset (newString) para regex; StringBuilder.setLength (0).
- Tenga en cuenta los problemas de sincronización, aunque puede ser seguro cuando se maneja mediante un subproceso de interfaz de usuario.
- Las estrategias de reciclaje se utilizan mucho en ListView.
- Use una ubicación de red gruesa, no GPS, cuando sea posible. Simplemente compare 1 mAh para GPS (25 seg. * 140 mA) y 0.1 mAh para red (2 segundos * 180 mA).
- Asegúrese de cancelar el registro ya que las actualizaciones de ubicación GPS pueden continuar incluso después de onPause (). Cuando todas las aplicaciones no se registran, los usuarios pueden habilitar el GPS en la Configuración sin gastar el presupuesto de la batería.
- Dado que el cálculo de un punto flotante requiere mucha energía de la batería, puede considerar el uso de microgrados para la geografía masiva y los valores de almacenamiento en caché al realizar tareas DPI con DisplayMetrics.
Consejo 7. Cómo optimizar aplicaciones que funcionan en segundo plano
- Dado que cada proceso requiere 2 MB y puede reiniciarse cuando las aplicaciones en primer plano necesitan memoria, asegúrese de que los servicios sean de corta duración.
- Mantenga el uso de memoria bajo.
- Diseñe la aplicación para actualizar cada 30 minutos, pero solo si el dispositivo ya está despierto.
- Los servicios que palidecen o duermen son malos, es por eso que debe usar los elementos de manifiesto AlarmManager o : stopSelf () cuando haya terminado. Cuando inicie el servicio con AlarmManager, aplique los indicadores * _WAKEUP con precaución. Deje que Android bin su aplicación se actualice junto con el resto a través de setInexactRepeating (). Cuando use , habilite / deshabilite sus componentes en el manifiesto de forma dinámica, especialmente cuando no hay operaciones.
Consejo 8. ¿Qué más puedes hacer?
- Verifique los estados actuales de la batería y la red antes de iniciar una actualización completa; esperar mejores estados para transferencias masivas.
- Proporcione a los usuarios opciones de uso de la batería, por ejemplo, intervalos de actualización y comportamiento en segundo plano.
Implementando una IU que deja huellas mínimas de memoria
Consejo 9. Cómo identificar problemas de rendimiento del diseño
Al crear una interfaz de usuario que se adhiere únicamente a las características básicas de los administradores de diseño, corre el riesgo de crear aplicaciones que abusen de la memoria con retrasos molestos en la interfaz de usuario. El primer paso para la implementación de una interfaz de usuario fluida y que cuide la memoria es buscar en su aplicación posibles cuellos de botella en el rendimiento del diseño con la herramienta Hierarchy Viewer incluida en el SDK de Android: / tools /.
Otra gran herramienta para descubrir problemas de rendimiento es Lint. Analiza las fuentes de la aplicación en busca de posibles errores junto con las optimizaciones de la jerarquía de vistas.
Consejo 10. Cómo solucionarlos
Si los resultados de rendimiento del diseño revelan ciertos inconvenientes, puede considerar aplanar el diseño convirtiéndolo de la clase LinearLayout a la clase RelativeLayout, reduciendo la jerarquía de nivel.
Buena suerte.