mozilla
검색 결과

    Power Management

    Non-standard
    This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

    This API is available on Firefox OS for certified applications only.

    요약

    전력 관리 API는 기기의 전력 소모를 관리하는 도구를 제공합니다.

    전력 관리

    전력 관리는 과도한 연산이나 화면을 다시그리는 등과 같은 실제 전력과는 조금 다릅니다. 이 모든 것이 다 전력 관리에 들어가게 됩니다. 하지만 전력 관리 API는 직접적인 전력 소모(화면, CPU 등)에 보다 집중합니다. 전력 관리에 대한 주요 인터페이스는 PowerManager 인터페이스의 인스턴스인 navigator.mozPower를 통해서 접근합니다.

    기본 전력 처리

    PowerManager 인터페이스는 기본 전력 처리 인터페이스를 제공합니다.

    전역 전력 처리

    powerOff() 메서드를 사용해서 아주 쉽게 기기의 전원을 끌 수 있고 reboot() 메서드를 통해서는 재부팅도 할 수 있습니다.

    navigator.mozPower.powerOff();

    화면 전력 처리

    화면은 읽기/쓰기 속성인 screenEnabled를 이용해서 켜고 끌 수 있습니다. 또한 화면의 밝기도 변경할 수 있습니다. 읽기/쓰기 속성인 screenBrightness를 이용해서 변경할 수 있고 0(아주 어두움)에서 1(최대 밝기)까지의 값을 이용해서 화면의 백라이트 밝기를 설정할 수 있습니다.

    // It doesn't make sense to change the brightness if the screen is off
    if (navigator.mozPower.screenEnabled) {
      navigator.mozPower.screenBrightness = 0.5;
    }

    CPU 전력 처리

    CPU를 직접 끄는 일은 가능하지 않지만 화면이 꺼져 있을 때에는 CPU가 꺼져도 되는지 아닌지를 알릴 수 있습니다. 이는 cpuSleepAllowed를 이용해서 설정할 수 있습니다. 이는 기기의 CPU가 화면이 꺼지거나(true) 켜져 있을(false) 때 잠자기 모드로 들어갈 수 있는지를 결정합니다; 화면이 켜져있다면 정지모드로 들어가지 않게 합니다.

    향상된 전력 처리

    전력 관리는 전력을 다루는 어플리케이션이 다른 어플리케이션의 요청에 대해 알림을 받을 수 있다면 더 잘 다뤄질 수 있습니다. 예를 들어서 사용자가 동영상을 보고 있다면 몇 초 후에 화면을 자동으로 끄지 않는 것이 더 좋을 수 있습니다.

    잠금 해제 요청

    어떤 어플리케이션이든 잠금 해체를 요청할 수 있습니다. 잠금 해제는 기기의 자원이 꺼지지 않도록 요청하는 방법입니다. 잠금 해체는 navigator.requestWakeLock() 메서드를 통해서 요청됩니다.

    잠금 해제는 다양한 이유로 사용할 수 없게 되는 특정 자원에 대한 요청입니다. 예를 들어서 모바일 기기의 전력 관리 기능은 전력 소모를 줄이기 위해서 어느정도 사용을 안하고 있으면 화면을 끕니다. 그 자원을 사용하는 어플리케이션은 자원이 꺼지기 전에 자원의 잠금 상태를 확인합니다. 예를 들어서 페이지는 화면 보호기가 나타나거나 화면이 꺼지는 것을 막기 위해서 screen에 대한 잠금을 막을 수 있습니다.

    기본 설정으로 Firefox OS는 screencpu, wifi 자원에 대한 잠금 허용을 합니다. 하지만 자원을 다루는 어떤 어플리케이션도 자원의 이름을 설정하고 잠금에 대한 정책을 정할 수 있습니다. 예를 들어서 자원 관리 기능은 현재 보이지 않는 어플리케이션이 screen에 대한 설정한 잠금 해제를 무시할 수 있습니다.

    var lock = navigator.requestWakeLock('screen');

    requestWakeLock 메서드는 잠금을 할 자원의 이름을 나타내는 topic 속성을 가지고 있는 객체를 반환합니다. unlock() 메서드는 잠금을 수동으로 반환하는데 사용합니다. 어플리케이션이 종료(대기 상태가 아닌 실제 종료)된다면 자동으로 모든 잠금 요청이 해제됩니다.

    잠금 해제 다루기

    잠금을 관리할 수 있는 인증된 애플리케이션은 잠금 상태가 변경되게 되면 알림을 받습니다. 실제로 전력을 관리하고자 하는 모든 애플리케이션은 screencpu의 잠금 상태를 추적하고 있어야 합니다. 이는 PowerManager.addWakeLockListener() 메서드를 통해 이루어집니다(PowerManager.removeWakeLockListener() 메서드를 이용해서 잠금 요청에 대한 추적을 멈출 수 있습니다).

    addWakeLockListener 메서드에는 두개의 파라메터를 전달 받는 콜백함수를 전달해야 합니다: 첫번째 문자열은 다룰 자원(여기서는 screen이나 cpu)을 나타내고 두번째 문자열은 잠금 상태를 나타냅니다.

    잠김은 세가지 상태가 있습니다:

    unlocked
    주어진 자원에 대해 잠금 해제를 할 수 없습니다.
    locked-foreground
    최소한 하나의 어플리케이션이 잠금 해제를 제어 할 수 있고 그 어플리케이션은 보이는 상태입니다..
    locked-background
    최소한 하나의 어플리케이션이 잠금 해제를 제어하지만 모든 애플리케이션이 보이지 않는 상태입니다.
    // This is used to keep track of the last change on the lock state
    var screenTimeout;
    
    // A reference to the Power Manager
    var power = window.navigator.mozPower;
    
    // Here are the actions to handle based on the lock state
    var powerAction = {
    
      // If there is no lock at all, we will suspend the device:
      // * Turn the screen off
      // * Allow the cpu to shut down
      unlocked: function suspendDevice() {
        power.cpuSleepAllowed = true;
        power.screenEnabled   = false;
      },
     
      // If there is a lock but the applications requesting it
      // are all in the background, we just turn the screen off
      'locked-background': function shutOffOnlyScreen() {
        power.cpuSleepAllowed = false;
        power.screenEnabled   = false;
      },
    
      // At last, if there is an active application that requests a lock,
      // actually there is nothing to do. That's the whole point.
    }
     
    function screenLockListener(topic, state) {
      // If the lock is not about the screen, there is nothing to do.
      if ('screen' !== topic) return;
    
      // Each time the lock changes state, we stop any pending power management operations
      window.clearTimeout(screenTimeout);
    
      // If there is an action defined for the given state
      if (powerAction[state]) {
        // We delay that action by 3s
        screenTimeout = window.setTimeout(powerAction[state], 3000);
      }
    }
    
    // We make sure our power management application is listening for any change on locks.
    power.addWakeLockListener(screenLockListener);

    명세

    관련된 명세가 없습니다.

    관련 내용

    문서 태그 및 공헌자

    Contributors to this page: hyeonseok
    최종 변경: hyeonseok,