# Class HealthSubscription

java.lang.Object
com.codename1.health.HealthSubscription

public final class HealthSubscription extends Object
A live handle on a registered subscription.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `HealthAnchor`
  `getAnchor()`
  The cursor reached by the most recent delivery, or null before the first one.
  `String`
  `getId()`
  The identifier this subscription was registered under.
  `long`
  `getLastDeliveryMillis()`
  When the last batch was delivered, epoch millis, or 0 if never.
  `List<HealthDataType>`
  `getTypes()`
  The types being watched.
  `boolean`
  `isActive()`
  `true` until `stop()` is called.
  `boolean`
  `isPushDelivery()`
  Whether the operating system wakes the app when new data arrives.
  `void`
  `stop()`
  Cancels the subscription and discards its persisted cursor.
  `String`
  `toString()`
  Returns a string representation of the object.

  ### Methods inherited from class Object

  `clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## Method Details

  - ### getId

    public String getId()
    The identifier this subscription was registered under.

  - ### getTypes

    public List<HealthDataType> getTypes()
    The types being watched.

  - ### isActive

    public boolean isActive()
    `true` until `stop()` is called.

  - ### isPushDelivery

    public boolean isPushDelivery()

    Whether the operating system wakes the app when new data arrives.

    `true` on iOS, `false` on Android. Health Connect has no push mechanism at all -- Google's own guidance is to poll -- so on Android the framework drains changes at app start, on foreground, and whenever you call `HealthStore.drainChanges()`. Wire that last one into your background-fetch handler if you need anything better than foreground-only.

    This is exposed as a queryable fact rather than hidden, because an app that assumes push on Android will silently miss data for days and its authors will never know why.

  - ### getAnchor

    public HealthAnchor getAnchor()
    The cursor reached by the most recent delivery, or null before the first one.

  - ### getLastDeliveryMillis

    public long getLastDeliveryMillis()
    When the last batch was delivered, epoch millis, or 0 if never.

  - ### stop

    public void stop()

    Cancels the subscription and discards its persisted cursor. Idempotent.

    Restarting later under the same id resynchronizes from scratch, because the cursor is gone. To pause without losing your place, simply stop calling `HealthStore.drainChanges()`.

  - ### toString

    public String toString()
    Description copied from class: `Object`
    Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method. The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of: getClass().getName() + '@' + Integer.toHexString(hashCode())
    Overrides:
      `toString` in class `Object`