Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

정지 모드

SoC 전원 상태

SoC(System on Chip)의 전원 상태는 켜짐, 유휴 및 정지입니다. '켜짐'은 SoC가 실행 중인 상태입니다. '유휴'는 SoC에 전원이 공급되지만 작업은 수행하지 않는 중간 전력 모드입니다. '정지'는 SoC에 전원이 공급되지 않는 저전력 모드입니다. 이 모드에서는 일반적으로 전력 소모량이 '켜짐' 모드보다 100배가 적습니다.

non-wake-up 센서

Non-wake-up 센서는 SoC가 정지 모드로 전환되지 않도록 예방하고 데이터 보고를 위해 SoC를 깨우지 않는 센서입니다. 특히 드라이버는 wake-lock을 유지할 수 없습니다. 애플리케이션은 화면이 꺼진 상태에서 non-wake-up 센서의 이벤트를 수신하고 싶은 경우 부분적 wake lock을 유지해야 합니다. SoC가 정지 모드를 유지하는 동안에는 센서가 계속해서 작동하며 이벤트를 생성해야 합니다. 이러한 이벤트는 하드웨어 FIFO에 배치됩니다(자세한 내용은 일괄 처리 참조). FIFO의 이벤트는 SoC의 절전 모드가 해제되면 애플리케이션으로 전달됩니다. 모든 이벤트를 저장하기에는 FIFO가 너무 작은 경우 기존 이벤트가 사라지며, 최신 데이터를 저장할 수 있도록 가장 오래된 데이터가 삭제됩니다. FIFO가 존재하지 않는 극단적인 경우에는 SoC가 정지 모드인 상태에서 생성된 모든 이벤트가 사라집니다. 한 가지 예외는 각 변경 시 센서의 최근 이벤트입니다. 마지막 이벤트는 사라지지 않도록 FIFO 외부에서 저장되어야 합니다.

SoC의 정지 모드가 해제되는 즉시 FIFO의 모든 이벤트가 보고되고 작업이 평상시처럼 재개됩니다.

non-wake-up 센서를 사용하는 애플리케이션은 wake lock을 유지하여 시스템이 정지 상태로 전환되지 않도록 하거나 필요없는 센서에서 등록 해제하거나 SoC가 정지 모드를 유지하는 동안 이벤트가 사라진다는 점을 예상해야 합니다.

Wake-up 센서

non-wake-up 센서와 달리 wake-up 센서는 SoC 상태와 상관없이 데이터가 제공되도록 합니다. Soc가 활성화된 동안에는 wake-up 센서가 non-wake-up 센서처럼 동작합니다. SoC가 절전 모드로 전환되면 wake-up 센서가 SoC를 활성화하여 이벤트를 전달해야 합니다. 또한 계속해서 SoC가 정지 모드로 전환되도록 허용해야 하지만 이벤트를 보고해야 하는 경우에도 SoC를 활성화해야 합니다. 즉, 센서는 최대 보고 지연 시간이 경과되거나 하드웨어 FIFO가 가득 차기 전에 SoC를 활성화하여 이벤트를 전달해야 합니다. 자세한 내용은 일괄 처리를 참조하세요.

SoC가 다시 절전 모드로 전환되기 전에 애플리케이션이 이벤트를 수신할 수 있는 시간을 확보할 수 있도록 하려면 이벤트가 보고될 때마다 드라이버가 '시간 제한 wake lock'을 200밀리초 동안 유지해야 합니다. 즉, SoC는 wake-up 개입에 이어 200밀리초 동안 절전 모드로 전환될 수 없어야 합니다. 이 요구사항은 향후 Android 버전에서는 사라질 예정이며, 그때까지는 이러한 시간 제한 wake lock이 필요합니다.

wake-up 및 non-wake-up 센서는 어떻게 정의해야 하나요?

KitKat까지는 센서 유형에 따라 wake-up 또는 non-wake-up 센서가 결정되었으며, proximity 센서 및 중요한 동작 감지기를 제외하면 대부분이 non-wake-up 센서였습니다.

L부터는 센서가 wake-up 센서인지 여부가 센서 정의의 플래그에 의해 지정됩니다. 대부분의 센서는 같은 센서의 wake-up 및 non-wake-up 변형 쌍으로 정의할 수 있으며, 여기서 센서는 서로 간에 상호작용하는 것이 아니라 두 개의 독립적인 센서로 동작해야 합니다. 자세한 내용은 상호작용을 참조하세요.

센서 유형 정의에 달리 명시되지 않은 이상 센서 유형에 나열된 각 센서 유형마다 wake-up 센서와 non-wake-up 센서를 하나씩 구현하는 것이 좋습니다. 각 센서 유형 정의에서 센서(wake-up 또는 non-wake-up)가 SensorManager.getDefaultSensor(sensorType)로 반환되는지 확인하세요. 이는 대부분의 애플리케이션에서 사용하게 될 센서입니다.