HarmonyOS应用开发实战:猫猫大作战-背景任务的申请与 BG 模式
·


前言
backgroundTasksKit 提供了后台任务能力,允许应用在后台持续运行有限时长。在「猫猫大作战」中,当游戏进行中用户切到后台时,我们需要申请后台任务让游戏继续运行,或者至少保存当前状态。
一、后台任务申请
import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
async function requestBackgroundRunning(context: Context): Promise<void> {
try {
await backgroundTaskManager.startBackgroundRunning(context,
backgroundTaskManager.BackgroundMode.AUDIO_PLAYBACK
);
console.info('后台运行已申请');
} catch (err) {
console.error(`后台运行申请失败: ${err.message}`);
}
}
async function stopBackgroundRunning(context: Context): Promise<void> {
try {
await backgroundTaskManager.stopBackgroundRunning(context);
console.info('后台运行已停止');
} catch (err) {
console.error(`停止后台运行失败: ${err.message}`);
}
}
二、支持的 BackgroundMode
| 模式 | 说明 | 游戏中使用 |
|---|---|---|
AUDIO_PLAYBACK |
音频播放 | 背景音乐继续播放 |
LOCATION |
定位 | 地理位置排行 |
DATA_TRANSFER |
数据传输 | 战绩同步 |
TASK |
短暂任务 | 状态保存 |
三、在游戏中的集成
onBackground() {
if (this.gameState === GameState.PLAYING) {
// 申请后台运行(保存游戏状态)
requestBackgroundRunning(getContext() as Context);
// 暂停游戏循环
this.gameState = GameState.PAUSED;
this.clearTimers();
// 保存游戏快照
AppStorage.setOrCreate('savedGame', {
score: this.score,
cats: this.cats,
gameTime: this.gameTime,
});
}
}
onForeground() {
stopBackgroundRunning(getContext() as Context);
// 恢复游戏状态
const saved = AppStorage.get<SavedGame>('savedGame');
if (saved && this.gameState === GameState.PAUSED) {
this.score = saved.score;
this.cats = saved.cats;
this.gameTime = saved.gameTime;
this.resumeGame();
}
}
四、限制说明
| 限制 | 说明 |
|---|---|
| 单次最长 | 3 分钟(普通任务)/ 更长(音频任务) |
| 每日配额 | 系统根据使用频率动态分配 |
| 必须用户可见时申请 | 切后台前后台任务 |
| 电量影响 | 长时间后台运行会显著增加耗电 |
五、最佳实践
- 仅必要时申请:只在游戏进行中切后台时申请
- 回前台立即停止:在
onForeground中调用stopBackgroundRunning - 状态保存:后台任务首要目标是保存游戏状态
- 音频模式保活:带 BGM 时用
AUDIO_PLAYBACK模式
总结
backgroundTasksKit 的后台任务能力让游戏在切后台时保存状态。核心要点:startBackgroundRunning 申请、 BackgroundMode 根据用途选择、 回前台立即停止、 优先保存游戏状态。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
更多推荐

所有评论(0)