Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Optimización de la aplicación de Android antes del lanzamiento

Estoy en una situación " especial " sobre la eficiencia de mi programa. Ahora estoy en una fase en la que necesito mejorar el rendimiento de la aplicación y reducir el consumo de la batería .

Antes de la pregunta:

  • El botón ALLOW no funciona después de la actualización
  • El método de Android AppWidgetManager updateAppWidget falla en establecer intents, cargar datos. Y sucede al azar
  • Lista de paginación y CursorLoader
  • Emulador de Android laggy en Mac
  • Tamaño de fondo de la imagen de la actividad de Android
  • Animar la transición entre fragmentos
    • En primer lugar, mi trabajo de aplicación. Corre muy bien – sin errores en absoluto .
    • En segundo lugar , he leído Optimización de la duración de la batería en el sitio web de desarrolladores de Android y he optimizado pequeñas cosas que han solicitado. No hay problemas en absoluto .

    Ahora, tengo curiosidad por conocer las correcciones especiales de otros desarrolladores que han utilizado para optimizar sus propias aplicaciones. Cosas que los usuarios nunca pueden reconocer o prestar atención. Sin embargo, las correcciones aumentarán la duración de la batería o ayudarán a mejorar el mantenimiento de la aplicación.

    Entonces, ¿cuál es tu truco (s) de optimización único?

    Estoy en una situación particular en la que realmente estoy buscando el conocimiento y creo que esta será una gran oportunidad para compartir el conocimiento de los desarrolladores sobre una situación en la que todos han estado.

    Por favor, votar hasta grandes respuestas como que animará a los grandes desarrolladores a compartir sus conocimientos.

  • Consejos para optimizar un sitio web para el navegador de Android?
  • Cómo detectar todos los dispositivos conectados en una red WiFi desde la aplicación para Android
  • Incluyendo Tess4J a un proyecto Java como biblioteca en Eclipse
  • Cómo deshabilitar la disposición de cajones de un lado?
  • Android - no puede capturar el espacio atrás / borrar la prensa en suave. teclado
  • Optimización del archivo de manifiesto de Android para el mayor número de dispositivos compatibles
  • 14 Solutions collect form web for “Optimización de la aplicación de Android antes del lanzamiento”

    En algún momento usted va a llegar al punto en que el uso de trucos conocidos alcanzará sus límites. Lo mejor que puede hacer en este momento es el perfil de su código y ver qué áreas son los cuellos de botella en función de sus necesidades específicas.

    Investigación del uso de RAM con MAT y Uso de Traceview : un artículo sobre cómo usar las herramientas para perfilar su aplicación.

    Asignaciones de pista y squash. Cuanto más se asigne, más a menudo el recolector de basura tendrá que ejecutar, deteniendo su proceso de hacer cualquier otra cosa durante períodos relativamente largos de tiempo, como 100 ms o menos.

    La mejor herramienta que conozco para esto es el Rastreador de Asignación incluido en DDMS .

    No sólo GC puede tener un impacto en la experiencia del usuario, pero las asignaciones superfluas y GC consumen algunos recursos informáticos.

    Aquí hay un ejemplo y un pequeño truco. En mi aplicación, tengo un reloj que muestra el tiempo actual (audio), incluyendo décimo de segundos. Esto se actualiza a menudo. Y TextView realiza asignaciones internamente cuando llama a setText () con un CharSequence. Pero no asigna nada con la variante setText (char [] text, int start, int len). Esto no está documentado, y nadie respondió cuando le pregunté por él.

    Hay muchos como este. Y esta es una de las razones por qué mi aplicación contiene 50% de código nativo (pero hay otras razones).

    Aparte de esto, puedo recomendar que experimentes con ProGuard . Realiza varias pasadas de optimización y registra información como métodos no utilizados dentro del proyecto, lo que puede ayudarle a eliminar las sobras de su código.

    Si tu aplicación tiene mucho tiempo en la pantalla, usa negro donde puedas . Eso reducirá el consumo de la batería de la peor parte del dispositivo: la pantalla, especialmente en los teléfonos AMOLED y tabletas.

    Para aplicaciones con múltiples actividades, compruebe que no está reiniciando actividades que sólo necesitan ser llevadas al frente utilizando los indicadores de intención apropiados. Compruebe que su montón está bajo control y que las vistas, los enlaces y los contextos innecesarios no se están creando.

    Encuentro la mejor herramienta para mostrarle todo esto como se ejecuta la aplicación es:

    adb shell dumpsys meminfo 'your apps package name' 

    Cuando utilice SQLlite, preste especial atención a los índices. No asuma nada. Conseguí enormes aceleraciones en Zwitscher, cuando puse índices en columnas comúnmente usadas para la búsqueda.

    Algunos consejos que pueden ayudarle a optimizar su aplicación en términos de interfaz de usuario :

    • Utilice convertView para los adaptadores de lista – sería muy costoso si crea una nueva vista dentro de Adapter.getView() ya que esta rutina se llama para cada posición en la lista. El uso de convertView permite reutilizar la vista ya creada. Un buen ejemplo (junto con el uso de ViewHolder ) se puede encontrar en ApiDemos .

    • Puede ocurrir que sus diseños no estén totalmente optimizados y puedan mejorarse (por ejemplo, mediante la fusión o eliminación de padres). Android herramienta layoutopt encontrará una situación para usted. Se puede usar con HierarchyViewer para inspeccionar vistas individuales. Más información aquí .

    • Quitar el fondo drawable – Android marco utilizado para tener (¿todavía tiene?) Un problema con la detección de qué puntos de vista deben ser dibujados. Existe la posibilidad de que su fondo (predeterminado) dibujable se dibujará sólo para ser ocultado posteriormente por su opaca UI. Para deshacerse de este dibujo despilfarrador simplemente retire el fondo dibujable.

    Se puede hacer usando un estilo personalizado

     <resources> <style name="Theme.NoBackground" parent="android:Theme"> <item name="android:windowBackground">@null</item> </style> </resources> 

    Algunos consejos que pueden ayudarle a optimizar su aplicación en términos de uso de la batería :

    • Comprobar el tipo de red y esperar hasta que el usuario se mete en el área con wifi o 3G (y no roaming) y sólo entonces le permiten utilizar la conexión

    • Utilice gzip para obtener datos de texto siempre que sea posible para acelerar la descarga y el análisis

    • XmlPullParserFactory objetos java complejos como XmlPullParserFactory / BitmapFactory / StringBuilder / Matcher etc.

    Para más trucos de baterías, consulte Codificación para la vida: duración de la batería, eso es .

    Algo sobre lo que pensar: NO use demasiado la cadena, por ejemplo en un bucle enorme. Esto creará una gran cantidad de objetos String que tienen que ser GC'ed. El ejemplo de "codificación incorrecta" producirá 2 objetos de cadena cada bucle. El siguiente ejemplo producirá sólo una String final y un stringbuilder único. Esto hace una gran diferencia al optimizar bucles enormes para la velocidad. Utilicé stringbuilder mucho al hacer mi aplicación de Wordlist Pro Android, y se puso muy rápido cuando se pasa por 270000 palabras en ningún momento.

      //Bad coding: String s = ""; for(int i=0;i<999999;i++){ s = "Number="; s = s + i; System.out.println(s); } //Better coding final String txt = "Number="; StringBuilder sb = new StringBuilder(); for(int i=0;i < 999999;i++){ sb.setLength(0); sb.append(txt); sb.append(i); System.out.println(sb); } 

    Escribí un blog más extenso sobre el asunto. leer aquí

    Supongo que usar variables "finales" donde sea posible también podría mejorar la velocidad de ejecución.

    Optimice sus imágenes PNG con herramientas como OptiPNG y PNGCrush para afeitar algunos (kilo) bytes de tamaño APK. Las sugerencias de optimización de imágenes para sitios web también se aplican aquí: use formatos de imagen adecuados, juegue con compresión JPG, considere el uso de transparencias binarias en lugar de transparencias de 8 bits, etc.

    Si envía PNG grandes con canal alfa, puede cambiar algunos tamaños de APK para la velocidad de inicio y utilizar JPGs separados para los canales RGB y A.

    Si está realizando conexiones HTTP, compruebe que su cliente HTTP utiliza compresión de contenido. Si almacena en caché las respuestas HTTP recibidas, compruebe que entiende y utiliza los encabezados HTTP relacionados con el caché correctamente.

    Si tiene operaciones de red, intente volver a usar la misma instancia httpclient. Evite usar expresiones regulares.

    Intente usar DDMS para rastrear todos los subprocesos que se ejecutan en el sistema. Por ejemplo, he notado que estaba usando webview para mostrar el contenido html, me di cuenta de que crea pocos hilos para la gestión de la sesión de gestión de galletas etc .. que aumentó mi pie de impresión de memoria. Así que a menos que tenga una grave necesidad de mostrar html complejo intente utilizar la clase de utilidad normal "Html" en android para mostrar el contenido html. Esto podría ser útil para las personas que están mostrando Eula ya que eula typicall contiene texto html.

    Si tienes que hacer operaciones de red, prueba a usar AndroidHttpClient si eres principiante, tiene algunas buenas capacidades para las sesiones de Caching SSL y todo lo que realmente ayuda a mejorar tu rendimiento. Siempre configure sus tiempos de espera de conexión de socket a algo alrededor de 60 segundos o algunos valores finitos porque los tiempos de espera infinitos pueden causar bloqueos, especialmente si se suelta la conexión durante el apretón de manos ssl.

    Utilice el rastreador de recursos de Android para encontrar recursos no utilizados en su proyecto que se pueden eliminar.

    Evite utilizar XPath si puede analizar su entrada XML utilizando rutinas de manipulación de cadenas para obtener el texto entre las etiquetas. He probado y puedo confirmar una mejora de 10x en este caso, en un conjunto de datos de 50000 elementos, en un HTC Desire.

    Sé que me estoy uniendo un poco más tarde a esta conversación, pero sería perfecto tener un montón de buenos consejos en un solo lugar, así que espero que este hilo estará vivo y actualizado a menudo. Mis consejos:

    • No bloquee el hilo de UI con trabajos costosos, el usuario se irá si no hay respuesta de la aplicación (use AsyncThreads).
    • Utilice la nueva herramienta LINT , que escanea las fuentes de proyectos de Android para posibles errores.

    ..será actualizado..

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.