Límite de frecuencia y comportamiento de la recopilación

Es posible que una solicitud de perfil no se complete o no entregue resultados de inmediato en las siguientes situaciones:

  • Límite de frecuencia: La recopilación se limita para proteger el rendimiento del dispositivo (consulta Cómo funciona el límite de frecuencia).
  • Cierre de la app antes de la entrega: Si la app se cierra o falla durante la captura, el sistema detiene y guarda el perfil en segundo plano, y entrega el resultado en cola la próxima vez que se ejecute la app (en primer o segundo plano) y registre un objeto de escucha global. El sistema conserva los resultados en cola no entregados durante un máximo de 7 días a la espera del registro del objeto de escucha. Si tu app no registra un objeto de escucha en un plazo de 7 días, se descarta el resultado en cola.

  • Otros errores: Si la recopilación falla (por ejemplo, debido a una solicitud no válida o un error interno), ProfilingResult informa el código y el mensaje de error.

Cómo funciona la limitación de frecuencia

Debido a que la captura de perfiles requiere muchos recursos, ProfilingManager aplica un límite de frecuencia tanto a nivel del proceso como del sistema para proteger el rendimiento del dispositivo y la duración de la batería. Los diferentes tipos de perfiles conllevan diferentes costos de recursos, y el sistema hace un seguimiento de las cuotas en períodos continuos en dos niveles:

  • Limitación de frecuencia de procesos: Realiza un seguimiento del costo de recursos de los perfiles que recopila tu app individual en relación con una cuota por app. Cada app recibe la misma cuota, y la actividad de generación de perfiles de otras apps en el dispositivo no afecta el límite de tu app. Si tu app alcanza su cuota para cualquier período, las solicitudes fallan con ERROR_FAILED_RATE_LIMIT_PROCESS.
  • Limitación de frecuencia del sistema: Realiza un seguimiento del costo combinado de recursos de los perfiles recopilados en todas las apps del dispositivo en relación con una cuota global compartida. Debido a que todas las apps contribuyen a este límite para todo el dispositivo, una solicitud puede fallar con ERROR_FAILED_RATE_LIMIT_SYSTEM incluso cuando tu app no haya agotado su propia cuota de procesos.

Administra el volumen de perfiles en producción

Debido a que los límites de frecuencia a nivel del dispositivo dependen del tipo de perfil y de la actividad general del sistema, no intentes hacer un seguimiento de las cuotas de límite de frecuencia locales exactas ni predecirlas dentro de tu app. En su lugar, enfócate en realizar la solicitud de generación de perfiles cuando se produzca un recorrido del usuario o una anomalía relevantes, y deja que ProfilingManager controle la limitación integrada en el dispositivo.

Para maximizar la cobertura en el campo y, al mismo tiempo, mantener bajo control el ancho de banda de carga y los costos de almacenamiento, controla el volumen general de perfiles con plataformas de segmentación y experimentación de la población (como la configuración remota o las marcas de pruebas A/B):

  • Muestrea tu base de usuarios: Habilita la generación de perfiles para un porcentaje pequeño y aleatorio de sesiones de usuario en lugar de solicitar perfiles de cada usuario en cada ejecución.
  • Segmenta por cohorte: Segmenta versiones específicas de la app, niveles de dispositivos, versiones del SO o regiones en las que estés investigando una regresión (por ejemplo, habilitando la recopilación de volcados de montón de Java en dispositivos con poca RAM que experimentan tasas elevadas de OOM).
  • Segmenta activadores y solicitudes directas entre usuarios: Asigna diferentes activadores de generación de perfiles y solicitudes de generación de perfiles directas a segmentos de usuarios separados para que algunos usuarios registren un perfil, mientras que otros registren uno diferente. Como todas las capturas de un dispositivo comparten la misma cuota por app, aislarlas en los segmentos de usuarios evita que los activadores o las solicitudes de mayor frecuencia agoten la cuota que necesitan las capturas de menor frecuencia en un solo dispositivo.