Chrome 앱 수명 주기

앱 런타임 및 이벤트 페이지는 앱 수명 주기를 관리합니다. 앱 런타임은 앱 설치를 관리하고 이벤트 페이지를 제어하며 언제든지 앱을 종료할 수 있습니다. 이벤트 페이지는 앱 런타임에서 이벤트를 수신 대기하고 실행되는 항목과 방법을 관리합니다.

수명 주기 작동 방식

앱 런타임이 사용자의 데스크톱에서 이벤트 페이지를 로드하고 onLaunch() 이벤트가 실행됩니다. 이 이벤트는 실행할 창과 그 크기를 이벤트 페이지에 알립니다.

앱 수명 주기 작동 방식

이벤트 페이지에 실행 중인 자바스크립트, 대기 중인 콜백, 열린 창이 없으면 런타임은 이벤트 페이지를 언로드하고 앱을 닫습니다. 이벤트 페이지를 로드 해제하기 전에 onSuspend() 이벤트가 실행됩니다. 이렇게 하면 앱이 닫히기 전에 이벤트 페이지에서 간단한 정리 작업을 실행할 수 있습니다.

이벤트 페이지 및 창 만들기

모든 앱에는 이벤트 페이지가 있어야 합니다. 이 페이지에는 자체 UI는 없는 애플리케이션의 최상위 로직이 포함되어 있으며 다른 모든 앱 페이지의 창을 만듭니다.

이벤트 만들기 페이지

이벤트 페이지를 만들려면 앱 매니페스트에 'background' 필드를 포함하고 스크립트 배열에 background.js를 포함합니다. 이벤트 페이지에서 사용하는 모든 라이브러리 스크립트를 먼저 '백그라운드' 필드에 추가해야 합니다.

"background": {
  "scripts": [
    "foo.js",
    "background.js"
  ]
}

이벤트 페이지에 onLaunched() 함수가 포함되어야 합니다. 이 함수는 애플리케이션이 어떤 방식으로든 실행될 때 호출됩니다.

chrome.app.runtime.onLaunched.addListener(function() {
  // Tell your app what to launch and how.
});

창 만들기

일정 페이지는 재량에 따라 하나 이상의 창을 만들 수 있습니다. 기본적으로 이러한 창은 이벤트 페이지에 대한 스크립트 연결을 통해 생성되며 이벤트 페이지에서 직접 스크립팅할 수 있습니다.

Chrome 앱의 창은 Chrome 브라우저 창과 연결되어 있지 않습니다. 여기에는 제목 표시줄과 크기 컨트롤이 있는 선택적 프레임과 권장 창 ID가 있습니다. ID가 없는 창은 다시 시작한 후 크기와 위치로 복원되지 않습니다.

다음은 background.js에서 만든 샘플 창입니다.

chrome.app.runtime.onLaunched.addListener(function() {
  chrome.app.window.create('main.html', {
    id: 'MyWindowID',
    bounds: {
      width: 800,
      height: 600,
      left: 100,
      top: 100
    },
    minWidth: 800,
    minHeight: 600
  });
});

출시 데이터 포함

앱이 실행된 방법에 따라 이벤트 페이지에서 출시 데이터를 처리해야 할 수 있습니다. 기본적으로 앱이 앱 런처에서 시작할 때는 시작 데이터가 없습니다. 파일 핸들러가 있는 앱의 경우 launchData.items 매개변수를 처리하여 핸들러가 파일로 실행될 수 있도록 해야 합니다.

앱 런타임 이벤트 리슨

앱 런타임은 앱 설치, 업데이트, 제거를 제어합니다. 앱 런타임을 설정하기 위해 아무것도 할 필요는 없지만, 이벤트 페이지에서 onInstalled() 이벤트를 수신 대기하여 로컬 설정을 저장하고 onSuspend() 이벤트를 수신 대기하여 이벤트 페이지가 로드 취소되기 전에 간단한 정리 작업을 실행할 수 있습니다.

로컬 설정 저장

chrome.runtime.onInstalled()는 앱이 처음 설치되거나 업데이트될 때 호출됩니다. 이 함수가 호출될 때마다 onInstalled 이벤트가 실행됩니다. 이벤트 페이지에서는 이 이벤트를 수신 대기하고 Storage API를 사용하여 로컬 설정을 저장하고 업데이트할 수 있습니다 (저장소 옵션 참고).

chrome.runtime.onInstalled.addListener(function() {
  chrome.storage.local.set(object items, function callback);
});

데이터 손실 방지

사용자는 언제든지 앱을 제거할 수 있습니다. 제거되면 실행 코드나 비공개 데이터는 남지 않습니다. 이렇게 하면 사용자가 로컬에서 편집되고 동기화되지 않은 데이터가 있는 앱을 제거할 수 있으므로 데이터 손실이 발생할 수 있습니다. 데이터 손실을 방지하려면 데이터를 보관해야 합니다.

사용자가 앱을 재설치하는 경우에도 사용자 정보를 계속 재사용할 수 있도록 사용자 설정을 저장해야 합니다. Storage API (storage.sync)를 사용하면 사용자 데이터를 Chrome 동기화와 자동으로 동기화할 수 있습니다.

앱이 종료되기 전 정리

앱 런타임은 로드 취소 전에 onSuspend() 이벤트를 이벤트 페이지로 전송합니다. 이벤트 페이지는 이 이벤트를 수신 대기하고 앱이 닫히기 전에 정리 작업을 실행하고 상태를 저장할 수 있습니다.

이 이벤트가 실행되면 앱 런타임에서 앱을 닫는 프로세스를 시작합니다. 앱에 열려 있는 창이 있는 경우 나중에 onRestarted 이벤트를 통해 다시 시작할 수 있습니다. 이 경우 앱은 onRestarted 이벤트를 수신하면 동일한 상태로 다시 시작할 수 있도록 현재 상태를 영구 저장소에 저장해야 합니다. 앱에서 상태를 저장하는 데 몇 초밖에 걸리지 않으며 이후에는 앱이 종료됩니다. 따라서 앱이 정상적으로 실행되는 동안에는 앱 상태를 점진적으로 저장하는 것이 좋습니다.

onSuspend를 수신한 후에는 어떤 이유로든 정지가 취소되지 않는 한 추가 이벤트가 앱에 전달되지 않습니다. 이 경우 onSuspendCanceled가 앱으로 전달되고 앱이 로드 취소되지 않습니다.

chrome.runtime.onSuspend.addListener(function() {
  // Do some simple clean-up tasks.
});