# 生命周期
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引擎的生命周期机制。这些生命周期钩子为你提供了强大的控制能力,让你能够精确管理场景的创建、显示、隐藏和销毁过程。