Planificar el rendimiento

Recomendamos que cumplas con los siguientes lineamientos de prácticas recomendadas para asegurarte de que tu app tenga un buen rendimiento con Health Connect.

Cómo escribir datos

Las apps solo deben escribir datos de origen propio en Health Connect.

Si los datos de tu app se importaron desde otra app, la responsabilidad de escribir sus propios datos en Health Connect recae en la otra app.

También es una buena idea implementar una lógica que maneje excepciones de escritura, como datos que están fuera de los límites o un error interno del sistema. Puedes aplicar tus estrategias de retirada y reintento en un mecanismo de programación de trabajos. Si la escritura en Health Connect no tiene éxito, asegúrate de que la app pueda superar ese punto de exportación. Recuerda informar y registrar errores para facilitar el diagnóstico.

Cuando realizas un seguimiento de los datos, hay algunas sugerencias que puedes seguir según la forma en que tu app escribe datos.

Seguimiento pasivo

Esto incluye las apps que realizan un seguimiento pasivo de la salud o la actividad física en segundo plano de forma continua, como el registro de pasos o de la frecuencia cardíaca.

La app debe escribir datos de forma periódica en Health Connect de las siguientes maneras:

  • En cada sincronización, solo escribe datos nuevos y actualiza los que se modificaron desde la última vez que se sincronizó.
  • Fragmenta las solicitudes a un máximo de 1,000 registros por solicitud de escritura.
  • Usa WorkManager para programar tareas periódicas en segundo plano, con un período de al menos 15 minutos.
  • Restringe las tareas para que se ejecuten solo cuando el dispositivo esté inactivo y no tenga poca batería.

    val constraints = Constraints.Builder()
        .requiresBatteryNotLow()
        .requiresDeviceIdle(true)
        .build()
    
    val writeDataWork = PeriodicWorkRequestBuilder<WriteDataToHealthConnectWorker>(
            15,
            TimeUnit.MINUTES,
            5,
            TimeUnit.MINUTES
        )
        .setConstraints(constraints)
        .build()
    

Seguimiento activo

Esto incluye las apps que realizan un seguimiento basado en eventos, como el ejercicio y el sueño, o las entradas manuales del usuario, como la nutrición. Estos registros se crean cuando la app está en primer plano o en eventos poco frecuentes en los que se usa algunas veces al día.

Asegúrate de que la app no mantenga Health Connect en ejecución durante todo el evento.

Los datos deben escribirse en Health Connect de una de estas dos maneras:

  • Sincroniza los datos de Health Connect una vez completado el evento. Por ejemplo, sincroniza los datos cuando el usuario finaliza una sesión de ejercicio registrada.
  • Programa una tarea única con WorkManager para sincronizar los datos más tarde.

Tasa de muestreo

Cuando escribas datos en Health Connect, usa las tasas de muestreo apropiadas para reducir la carga de almacenamiento. Por ejemplo, vale la pena pensar en la frecuencia con la que se deben registrar los datos del recuento de pasos o qué tipo de tasa de muestreo requieren los datos vinculados a un entrenamiento activo, como la velocidad.

No todos los tipos de datos requieren la misma tasa de muestreo. No es muy beneficioso actualizar los datos del recuento de pasos por segundo, en comparación con una cadencia menos frecuente, como cada 60 segundos. Sin embargo, las tasas de muestreo más altas pueden dar a los usuarios un panorama más detallado de sus datos de salud y actividad física. Las frecuencias de las tasas de muestreo deben alcanzar un equilibrio entre detalle y rendimiento.

Sincronización de datos

Los siguientes factores afectan el proceso de sincronización:

Vencimiento del token

Como un token de cambios sin usar vence en 30 días, debes implementar una estrategia de sincronización que evite perder información en tal caso. Tu estrategia podría incluir los siguientes enfoques:

  • Busca en el almacén de datos de la app el registro consumido más reciente que también tenga un id de Health Connect.
  • Solicita registros de Health Connect que comiencen con una marca de tiempo específica y, luego, insértalos o actualízalos en el almacén de datos de la app.
  • Solicita un token de cambios para reservarlo para la próxima vez que lo necesites.

Estrategias recomendadas de administración de cambios

Si la app obtiene tokens de cambios no válidos o vencidos, te recomendamos que sigas las siguientes estrategias de administración según su aplicación en tu lógica:

  • Lee y anula la duplicación de todos los datos. Esta es la estrategia ideal.
    • Almacena la marca de tiempo de la última vez que leyeron datos de Health Connect.
    • Cuando venza el token, vuelve a leer todos los datos de la marca de tiempo más reciente o de los últimos 30 días. Luego, anula los duplicados en función de los datos leídos anteriormente usando identificadores.
    • Lo ideal es implementar los IDs de cliente, ya que son necesarios para las actualizaciones de datos.
  • Solo lee los datos desde la última marca de tiempo de lectura. Esto genera algunas discrepancias de datos alrededor del tiempo de vencimiento del token de cambios, pero el período es más corto y puede tardar unas horas o un par de días.
    • Almacena la marca de tiempo de la última vez que leyeron datos de Health Connect.
    • Cuando venza el token, lee todos los datos desde esa marca de tiempo en adelante.
  • Borra los datos de los últimos 30 días y, luego, léelos. Esto se alinea más con lo que sucede en la primera integración.
    • Borra todos los datos que haya leído la app de Health Connect durante los últimos 30 días.
    • Una vez borrados, vuelve a leer todos estos datos.
  • Lee los datos de los últimos 30 días sin anular la duplicación. Esta es la estrategia menos ideal y genera que se muestren datos duplicados a los usuarios.
    • Borra todos los datos que haya leído la app de Health Connect durante los últimos 30 días.
    • Permite entradas duplicadas.

Tokens de cambios para tipos de datos

Si la app consume más de un tipo de datos de forma independiente, usa tokens de cambios separados para cada tipo de datos. Solo usa una lista de varios tipos de datos con la API de Changes Sync si estos tipos de datos se consumen juntos o no se consumen en absoluto.

Lecturas en primer plano

Las apps solo pueden leer datos de Health Connect mientras se encuentran en primer plano. Cuando sincronizas los datos de Health Connect, el acceso a Health Connect puede interrumpirse en cualquier momento. Por ejemplo, la app debe controlar las interrupciones durante una sincronización cuando lee una gran cantidad de datos de Health Connect y continuar la próxima vez que se abra.

Tiempos de importación

Dado que no se puede notificar a la app sobre datos nuevos, comprueba los datos nuevos en dos puntos:

  • Cada vez que tu app se activa en primer plano. En este caso, usa eventos de ciclo de vida.
  • Periódicamente, mientras la app permanece en primer plano Notifica a los usuarios cuando haya datos nuevos disponibles. Eso les permitirá actualizar la pantalla para reflejar los cambios.

Límites de frecuencia

En raras ocasiones, Health Connect establece límites de frecuencia para las solicitudes de tu app. Esto se hace para limitar el impacto sobre la batería y el rendimiento del dispositivo.

  • Sugerimos seguir algunas prácticas recomendadas para evitar que se rechacen las solicitudes de tu app debido al límite de frecuencia.
  • Las apps deben ser resistentes al límite de frecuencia. Por ejemplo, los datos en segundo plano se pueden escribir durante la siguiente tarea periódica, en caso de que las solicitudes fallen debido al límite de frecuencia.

Integra tu app

Muchas apps tienen un flujo de integración personalizado, como la educación sobre funciones o la solicitud del consentimiento del usuario. Se recomienda que los desarrolladores exporten una actividad de integración que Health Connect pueda iniciar cuando el usuario interactúe con la app por primera vez. Para ello, agrega lo siguiente en tu manifiesto:

<!-- Required to support pre-Android 14 devices with APK Health Connect -->
<activity
  android:name=".OnboardingActivity"
  android:exported="true"
  android:permission="com.google.android.apps.healthdata.permission.START_ONBOARDING"
  <intent-filter>
    <action android:name="androidx.health.ACTION_SHOW_ONBOARDING"/>
  </intent-filter>
</activity>
<!-- Required to support Android 14+ devices with platform Health Connect -->
<activity-alias
  android:name="UAndAboveOnboardingActivity"
  android:exported="true"
  android:targetActivity=".OnboardingActivity"
  android:permission="android.permission.health.START_ONBOARDING">
  <intent-filter>
    <action android:name="android.health.connect.action.ACTION_SHOW_ONBOARDING" />
  </intent-filter>
</activity-alias>

Ten en cuenta que la compatibilidad con esta función aún no está disponible para Android 14, pero lo estará pronto.

Cuando un usuario intenta conectar tu app con Health Connect, se inicia la actividad exportada. Esta actividad debe hacer lo siguiente:

  • Mostrar la educación de usuario relevante, como explicar qué datos se escriben o leen
  • Pedir al usuario que otorgue consentimiento si es necesario
  • Enviar una solicitud de permisos a Health Connect
  • Llevar a cabo cualquier otra lógica específica de la aplicación, como programar un trabajador periódico
  • Permitir que el usuario descarte la actividad una vez completada

En el caso de las apps que no exportan una actividad de integración, Health Connect lleva al usuario a la pantalla Administrar permisos una vez que intenta conectar la app. Esto puede ser aceptable para las apps en las que los permisos que se otorgan son el único requisito previo para que funcione la integración.

Ten en cuenta que la actividad de integración puede iniciarse más de una vez, por ejemplo, si el usuario revoca permisos a tu app y la vuelve a conectar más adelante.