앱 런타임 및 이벤트 페이지는 앱 수명 주기를 관리합니다. 앱 런타임은 앱 설치를 관리하고, 이벤트 페이지를 제어하며, 언제든지 앱을 종료할 수 있습니다. 이벤트 페이지는 앱 런타임의 이벤트를 수신 대기하고 실행되는 항목과 실행 방법을 관리합니다.
수명 주기 작동 방식
앱 런타임이 사용자의 데스크톱에서 이벤트 페이지를 로드하고 onLaunch()
이벤트가 실행됩니다. 이 이벤트는 이벤트 페이지에 실행할 창과 크기를 알려줍니다.
이벤트 페이지에 실행 중인 JavaScript가 없고 대기 중인 콜백이 없으며 열려 있는 창이 없으면 런타임은 이벤트 페이지를 언로드하고 앱을 닫습니다. 이벤트 페이지를 언로드하기 전에 onSuspend()
이벤트가 실행됩니다. 이렇게 하면 이벤트 페이지에서 앱이 종료되기 전에 간단한 정리 작업을 실행할 수 있습니다.
이벤트 페이지 및 창 만들기
모든 앱에는 이벤트 페이지가 있어야 합니다. 이 페이지에는 자체 UI가 없는 애플리케이션의 최상위 로직이 포함되어 있으며 다른 모든 앱 페이지의 창을 만드는 역할을 합니다.
이벤트 페이지 만들기
이벤트 페이지를 만들려면 앱 매니페스트에 'background' 필드를 포함하고 스크립트 배열에 background.js
를 포함합니다. 이벤트 페이지에서 사용하는 모든 라이브러리 스크립트는 먼저 'background' 필드에 추가해야 합니다.
"background": {
"scripts": [
"foo.js",
"background.js"
]
}
이벤트 페이지에 onLaunched()
함수가 포함되어야 합니다. 이 함수는 애플리케이션이 어떤 방식으로든 실행될 때 호출됩니다.
chrome.app.runtime.onLaunched.addListener(function() {
// Tell your app what to launch and how.
});
창 만들기
이벤트 페이지는 재량에 따라 하나 이상의 창을 만들 수 있습니다. 기본적으로 이러한 기간은 이벤트 페이지에 대한 스크립트 연결로 생성되며 이벤트 페이지에서 직접 스크립트로 작성할 수 있습니다.
Chrome 앱의 Windows는 Chrome 브라우저 창과 연결되어 있지 않습니다. 제목 표시줄 및 크기 컨트롤이 있는 프레임(선택사항)과 권장 창 ID가 있습니다. ID가 없는 Windows는 다시 시작 후 크기와 위치로 복원되지 않습니다.
다음은 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.
});