# 生命周期 PE引擎为场景提供了完整的生命周期钩子,让你能够在适当的时机执行初始化、清理和其他操作。理解生命周期对于开发高效、稳定的PE应用至关重要。 ## 生命周期钩子概览 每个PE场景都有四个主要的生命周期钩子: 1. **onLoad** - 场景加载时调用(只执行一次) 2. **onShow** - 场景显示时调用(每次显示都会执行) 3. **onHide** - 场景隐藏时调用 4. **onDestory** - 场景销毁时调用(只执行一次) ## onLoad `onLoad`钩子在场景首次加载时调用,只执行一次。这是进行一次性初始化操作的最佳时机。 ```html 欢迎来到PE引擎 ``` ## onShow `onShow`钩子在场景每次显示时调用。无论是首次显示还是从其他场景切换回来,都会执行此钩子。 ```html 场景内容 最后更新: {{ lastUpdated }} ``` ## onHide `onHide`钩子在场景隐藏时调用,比如切换到其他场景时。 ```html 场景内容 ``` ## onDestory `onDestory`钩子在场景销毁时调用,通常发生在应用关闭或场景被永久移除时。 ```html 场景内容 ``` ## 生命周期执行顺序 理解生命周期钩子的执行顺序对于正确管理场景状态非常重要: ### 首次加载场景 1. `onLoad` - 场景加载时执行(一次) 2. `onShow` - 场景显示时执行 ### 切换到其他场景 1. 当前场景: `onHide` - 场景隐藏时执行 ### 切换回场景 1. `onShow` - 场景显示时执行 ### 销毁场景 1. `onHide` - 场景隐藏时执行(如果当前显示) 2. `onDestory` - 场景销毁时执行(一次) ## 实际应用示例 以下是一个完整的生命周期应用示例: ### scenes/dashboard/index.pe ```html 仪表板 状态: {{ status }} 最后更新: {{ lastUpdate }} {{ item.title }} {{ item.value }} 刷新数据 设置 ``` ## 生命周期最佳实践 ### 1. 合理分配操作到不同钩子 ```javascript // 正确的做法 onLoad(() => { // 一次性初始化操作 initializeDatabase() setupGlobalEventListeners() }) onShow(() => { // 每次显示时的操作 startDataPolling() resumeAnimations() }) onHide(() => { // 隐藏时的操作 stopDataPolling() pauseAnimations() }) onDestory(() => { // 销毁时的操作 cleanupResources() removeEventListeners() }) ``` ### 2. 及时清理资源 ```javascript onLoad(() => { // 创建定时器 this.timer = setInterval(updateData, 5000) // 添加事件监听器 document.addEventListener('keydown', handleKeyDown) }) onDestory(() => { // 清理定时器 if (this.timer) { clearInterval(this.timer) this.timer = null } // 移除事件监听器 document.removeEventListener('keydown', handleKeyDown) }) ``` ### 3. 处理异步操作 ```javascript onLoad(async () => { try { // 异步加载数据 this.data = await loadDataFromServer() updateUI() } catch (error) { console.error('加载数据失败:', error) showErrorMessage() } }) onDestory(() => { // 取消未完成的请求 if (this.currentRequest) { this.currentRequest.cancel() } }) ``` 通过以上内容,你已经了解了PE引擎的生命周期机制。这些生命周期钩子为你提供了强大的控制能力,让你能够精确管理场景的创建、显示、隐藏和销毁过程。