Sé que esto es probablemente una pregunta tonta, pero soy bastante nuevo en el desarrollo de android, y me experimentando actualmente un OutOfMemoryError en mis aplicaciones, que he tratado de depurar el uso de MAT, pero todavía es demasiado duro para encontrar la fuga en un par de actividades, luego me enteré de LeakCanary, lo que parece más simple y más fácil de usar, sin embargo, no pude encontrar cualquier principiante guía paso a paso sobre el uso de Fuga de Canarias, incluso en Google. He instalado LeakCanary a través de las dependencias en mi generación.gradle, y esto es lo que tengo hasta el momento :

ExampleApplication.java

Digamos que tengo una Actividad en la que quiero LeakCanary para ver un objeto

SampleActivity.java

Ahora ¿cómo puedo usar LeakCanary para ver el objeto que está causando la pérdida de memoria. Gracias por su ayuda y asistencia.

  • Tenga en cuenta que un OutOfMemoryError no necesariamente significa que usted tiene una pérdida de memoria. Usted sólo puede estar tratando de sacar demasiados recursos o simplemente está utilizando demasiada memoria con sus activos, etc. Si usted está usando un emulador, primero trate de simplemente aumentar la RAM a ver si se soluciona.
  • Nope, esto es causado por la pérdida de memoria causada he comprobado el uso de DDMS para comprobar el volcado del montón, y aunque la actividad está cerrado, la memoria asignada todavía está allí y no en el recolector de basura, y cada vez son más y más grande hasta que la aplicación se estrelló.
  • Tengo la misma pregunta pero no he encontrado una respuesta. He visto un par de videos. Sin embargo, ninguno de mostrar los conceptos básicos de cómo iniciar la aplicación y ver las rutas de acceso a objetos se filtró. Por ejemplo, debería lanzar la aplicación desde el Android Studio o desde el dispositivo? Se puede ejecutar en un emulador? Recibí notificaciones, pero ¿por qué no las veo en las Goteras de la aplicación? Tengo varias Fugas de aplicaciones, debo eliminar algunos? Parece un gran sistema, pero los fundamentos no son claros.
InformationsquelleAutor Charas | 2015-11-11

4 Comentarios

  1. 19

    La cosa buena acerca de la pérdida de canarias es cómo automatizado funciona.
    Por defecto, es ya «relojes» para actividades que no están siendo correctamente GCed. Por lo tanto, fuera de la caja, si alguna actividad es una fuga que debe recibir la notificación.

    En mi proyecto he añadido un extra de método en la Application como este:

    así las cosas importantes con la recolección de basura y pérdida de memoria y canarias es para saber cuando las cosas deben ser recogidos y pedir que el elemento a ser visto.

    Para, por ejemplo, estamos usando una base «fragmento» con el siguiente código:

    de esta manera LeakCanary está tratando de comprobar si cualquier fragmento tiene una fuga de memoria.

    Así que para ayudarte a poner en práctica en su aplicación, usted podría/debería de tareas o casos en los que usted sabe que debe ser el recolector de basura pero creo que no puede ser, y no estás seguro de dónde, usted puede llamar a eso: ExampleApplication.instance.mustDie(object);

    y, a continuación, DEBE ejecutar la aplicación y girar el dispositivo y la fuerza de la filtración a suceder, por lo fuga de canarias puede agarrar/analizar el seguimiento de la pila y le dará información valiosa sobre cómo solucionarlo.

    Espero te sirva de ayuda.

    • He copiado y pegado tu ExampleApplicatio, pero todavía no estoy recibiendo notificaciones..?
    • al matar a la actividad, no el onDestroy se llama ? Yo creo que si se destruyen por el golpe y la matanza de la aplicación o similares, el ondestroy podría no ser llamado. I;ve un problema similar. Así que, he añadido un botón para cerrar sesión para probar el propósito que mediante programación destruir mi actividad y, por tanto, llamar a onDestroy y tengo las filtraciones que no me di;t consigue mediante la aplicación normal de terminación
  2. 2

    Tenía la misma pregunta acerca de cómo utilizar LeakCanary. Yo sólo quería ver un ejemplo básico de cómo poner en marcha y ver mi primer camino a un filtrado del objeto.

    Cómo Utilizar LeakCanary

    Aquí es un ejemplo básico de cómo LeakCanary de trabajo:

    Cómo Utilizar LeakCanary (4 minutos y 13 segundos)

    Uno de los problemas que tuvo que superar fue averiguar que tenía que lanzar la aplicación en funcionamiento regular de modo opuesto al modo de depuración. También he tenido que desviarse de las instrucciones básicas y establecer mi nivel de aplicación build.gradle archivo de la siguiente manera:

    Creo debugImplementation no trabajo para mí, porque LeakCanary ignora la detección de fugas cuando la depuración de. Aunque LeakCanary dice que proporciona la «no-op» versión de su biblioteca para la liberación, ya que la depuración no funciona para mí, he cambiado el releaseImplementation por encima de la recomendada com.squareup.leakcanary:leakcanary-android-no-op:1.5.4 a com.squareup.leakcanary:leakcanary-android:1.5.4.

    Como se puede ver en el vídeo, otro problema que he tenido que lidiar estaba dando de acceso de escritura a LeakCanary. Yo deslizan hacia abajo y vio una notificación de LeakCanary diciendo que no habían podido obtener acceso de escritura (más info). Nunca vi a la solicitud de permiso. Así que en un caso (no se muestra en el video), me dio a mi solicitud de acceso de escritura por ir a la Configuración de la aplicación, la búsqueda de mi aplicación (como oposición a la aplicación de la llamada «Fuga» que LeakCanary instala), y el encendido de acceso de escritura. En el video no tenía la necesidad de hacerlo porque me dio permiso de responder a la notificación. A continuación, mientras que el uso de mi aplicación que compruebe periódicamente si hay nuevas notificaciones (por deslizar hacia abajo). Vi los mensajes como «XYZActivity filtró 217 KB». Me tocó en eso y me llevó en que la Fuga de la aplicación.

    También, me di cuenta de que A veces puede tomar hasta un par de minutos para que el análisis completo y muestran una pérdida de memoria de notificación en su teléfono.

    Cómo comprobar que la pérdida de memoria de arreglar con LeakCanary

    Ahora que me he fijado que algunos de mis pérdidas de memoria, yo uso LeakCanary para verificar la corrección. Sin embargo, si LeakCanary no se informe de todo lo que no necesariamente creen que porque mi fuga es fijo. Podría ser sólo LeakCanary está roto.

    Cómo comprobar que la pérdida de memoria de arreglar con LeakCanary (16 minutos 34 segundos)

    Proceso para Verificar la Pérdida de Memoria con LeakCanary:
    1. Confirmar la pérdida de memoria existe con LeakCanary
    2. Corrección de pérdida de memoria y confirmar LeakCanary informes no hay fugas
    3. Revertir su revisión y confirmar LeakCanary informes de la fuga de nuevo

    Desde LeakCanary muestra muy poca información de estado cuando está trabajando, es difícil saber si se está haciendo nada en absoluto. Esto me ha llevado a pensar que tenía fija una pérdida de memoria cuando, en realidad, yo no había. Los tres pasos anteriores son la mejor manera que he encontrado para verificar una pérdida de memoria de arreglar con LeakCanary.

    • Honestamente, en lugar de ayudar a esta respuesta genera más confusión, al menos para mí.
    • Siéntase libre de dar más detalles porque no sé lo que es confuso para usted.
    • «Tuve que lanzar la aplicación en funcionamiento regular de modo opuesto al modo de depuración. También he tenido que desviarse de las instrucciones básicas y» Así que hay un «oficial» (el llamado «instrucciones básicas»), para hacer esto, pero usted acaba de hacer su propio camino por el motivo que sea. Que confuso. También hay una buena razón para esta biblioteca no se ejecute en la liberación, pero sólo en la depuración, pero usted lo está utilizando en la liberación. Y en la parte superior de eso, su respuesta es sobre todo un vínculo basado en la respuesta, una bastante larga pero sin embargo no proporciona suficiente información sobre la forma de abordar el OP problema a menos que él mira los videos. 🙂
    • Sí, hice el video porque sentí que había un montón de cosas que un novato necesita para ver y un montón de secuencias de eventos que eran más fáciles de mostrar en un video. No estoy seguro de si las «instrucciones básicas» están mejor ahora, pero si para ir con ellos seguro. No recuerdo por qué elegí la liberación en lugar de depurar, pero creo que me metió en problemas con la liberación en el tiempo. Gracias por tus comentarios.
  3. 0

    He utilizado las Fugas de Canarias, como el de abajo:

    1) Gradle dependencia:

    2) clase de Aplicación:

    3) LeakLoggerService clase: lugar de esta clase en el paquete de depuración creado por gradle.

    4) servicio de Registro para el archivo de manifiesto y 1 permiso:

    5) Finalmente verificar si la instalación es correcta: Pérdida de una actividad 😉

    matar a esta actividad y comprobar los registros con la etiqueta : LeakCanary

    Debería funcionar…

    • real y formal de las listas de argumentos difieren en la longitud para install()

Dejar respuesta

Please enter your comment!
Please enter your name here