Chrome App Lifecycle(Chrome 应用生命周期)
警告
重要提示:Chrome 将在所有平台上取消对 Chrome 应用程序的支持。 Chrome 浏览器和 Chrome 网上应用店将继续支持扩展。阅读公告并了解有关迁移应用程序的更多信息。
应用运行时和事件页面负责管理应用生命周期。应用运行时管理应用安装,控制事件页面,可以随时关闭应用。事件页面侦听来自应用程序运行时的事件并管理启动的内容和方式。
# 生命周期如何运作
应用运行时从用户的桌面加载事件页面并触发 onLaunch()
事件。此事件告诉事件页面要启动哪些窗口及其尺寸。
当事件页面没有正在执行的 JavaScript、没有挂起的回调和没有打开的窗口时,运行时会卸载事件页面并关闭应用程序。在卸载事件页面之前,会触发 onSuspend()
事件。这使事件页面有机会在应用程序关闭之前执行简单的清理任务。
# 创建事件页面和窗口
所有应用程序都必须有一个事件页面。此页面包含应用程序的顶级逻辑,没有自己的 UI,并负责为所有其他应用程序页面创建窗口。
# 创建活动页面
要创建事件页面,请在应用程序清单中包含“background
”字段,并在脚本数组中包含 background.js
。事件页面使用的任何库脚本都需要先添加到“background”字段中:
"background": {
"scripts": [
"foo.js",
"background.js"
]
}
您的活动页面必须包含 onLaunched() 函数。当您的应用程序以任何方式启动时,将调用此函数:
chrome.app.runtime.onLaunched.addListener(function() {
// 告诉您的应用要启动什么以及如何启动。
});
# 创建窗口
一个事件页面可以自行决定创建一个或多个窗口。默认情况下,这些窗口是通过与事件页面的脚本连接创建的,并且可以由事件页面直接编写脚本。
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
});
});
# Including Launch Data(包括启动数据)
根据您的应用程序的启动方式,您可能需要在事件页面中处理启动数据。默认情况下,应用启动器启动应用时没有启动数据。对于具有文件处理程序的应用程序,您需要处理 launchData.items
参数以允许它们与文件一起启动。
# 监听应用运行时事件(Listening for app runtime events)
应用运行时控制应用安装、更新和卸载。您无需执行任何操作即可设置应用运行时,但是您的事件页面可以侦听 onInstalled()
事件以存储本地设置,并侦听 onSuspend()
事件以在事件页面卸载之前执行简单的清理任务。
# Storing local settings(存储本地设置)
chrome.runtime.onInstalled() 在您的应用首次安装或更新时被调用。每当调用此函数时,都会触发 onInstalled
事件。事件页面可以侦听此事件并使用Storage API 来存储和更新本地设置(另请参阅Storage options)。
chrome.runtime.onInstalled.addListener(function() {
chrome.storage.local.set(object items, function callback);
});
# Preventing data loss(防止数据丢失)
用户可以随时卸载您的应用。卸载时,不会留下任何执行代码或私人数据。这可能会导致数据丢失,因为用户可能正在卸载具有本地编辑、未同步数据的应用程序。您应该存储数据以防止数据丢失。
至少,您应该存储用户设置,以便在用户重新安装您的应用程序时,他们的信息仍可重复使用。使用 Storage API (storage.sync),用户数据可以自动与 Chrome 同步。
# Clean-up before app closes(应用程序关闭前的清理)
应用运行时将 onSuspend()
事件发送到事件页面,然后再卸载它。您的事件页面可以侦听此事件并在应用程序关闭之前执行清理任务并保存状态。
触发此事件后,应用程序运行时将启动关闭应用程序的过程。如果应用程序有打开的窗口,它可能会在未来通过 onRestarted
事件重新启动。在这种情况下,应用程序应将其当前状态保存到持久存储中,以便在收到 onRestarted
事件时可以在相同状态下重新启动。应用程序只有几秒钟的时间来保存其状态,之后它将被终止,因此在应用程序正常运行时逐步保存应用程序状态是一个好主意。
收到 onSuspend
后,不会再向应用程序发送任何事件,除非暂停因某种原因中止。在这种情况下,onSuspendCanceled
将传递给应用程序,并且不会卸载应用程序。
chrome.runtime.onSuspend.addListener(function() {
// Do some simple clean-up tasks.
});
By.一粒技术服务