ios - Cocos2d 游戏从后台返回时自动重启

标签 ios objective-c cocos2d-iphone

我有一个cocos2d-iphone 1.0.1游戏。测试人员发现了一个奇怪的问题。步骤:

  • 打开游戏
  • 按主页键
  • 打开 Safari
  • 回到游戏中

这通常会导致游戏重新启动。不完全是崩溃:游戏不会自行关闭 - 它只是从初始屏幕重新启动。我自己无法重现这一点,但测试人员有以下信息:

  • 出现在 iOS 6 和 7 上
  • 似乎不是特定于设备的:发生在 iPhone 4、4s、5...以及 iPod 和 iPad 上。
  • 似乎需要打开一个不同的应用程序(如 Safari)来重现这一点。如果您只是按下主页按钮并重新打开应用程序,它不会自行重启。
  • 这不太可能是由于内存错误引起的 - 这个错误可以在游戏的标题屏幕上重现,这非常简单。
  • 设备未越狱。
  • 无论您是否登录到 Game Center 都会发生。

测试人员有一个日志,最引人注目的事实是:

Arthurs-iPhone com.apple.launchd[1] (com.apple.mobile.installation_proxy[4825]) <Notice>: (com.apple.mobile.installation_proxy) Idle-exit job was jettisoned. Will bypass throttle interval for next on-demand launch.
Arthurs-iPhone com.apple.launchd[1] (com.apple.mobile.installation_proxy[4825]) <Error>: (com.apple.mobile.installation_proxy) assertion failed: 11D257: launchd + 35833 [1A6C526C-3CCA-3E32-B3C0-F448B1D16C89]: 0x9
Arthurs-iPhone com.apple.launchd[1] (com.apple.sandboxd[4818]) <Notice>: (com.apple.sandboxd) Idle-exit job was jettisoned. Will bypass throttle interval for next on-demand launch.

还有几行几乎是一回事。如您所见,iOS 似乎在抛弃应用程序,这表明内存不足。然而,这很奇怪,因为

  • 测试人员后台没有其他应用
  • 游戏没有任何内存警告,特别是因为您可以在标题屏幕本身上重现此错误,而实际上根本没有分配太多内存。

所以很难相信 iOS 需要这样做。

我最好的选择似乎是查看 AppDelegate - 毕竟,这是应用程序进入/退出前台时的方法实现。

-(void) applicationDidEnterBackground:(UIApplication*)application {
    [[CCDirector sharedDirector] pause];
    [[CCDirector sharedDirector] stopAnimation];
}

-(void) applicationWillEnterForeground:(UIApplication*)application {
    [[CCDirector sharedDirector] resume];
    [[CCDirector sharedDirector] startAnimation];
    [[GameManager sharedManager] refreshInterface];   // Just update the interface
}

- (void)applicationWillResignActive:(UIApplication *)application {
    [[CCDirector sharedDirector] pause];
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [[CCDirector sharedDirector] resume];
}

一切似乎都井井有条。

那会发生什么?

最佳答案

最简单的解释:Safari需要大量内存。因此,iOS 决定关闭不需要的后台应用程序以释放更多内存。

总的来说,您不必担心这种情况的发生,因为它可能随时在任何设备上发生。甚至用户自己也可以强制关闭后台应用程序。双击主页按钮,然后向上滑动应用程序的预览图像以终止它。

这似乎不是一个错误,而是正常的 iOS 行为。您需要做的是确保应用程序 - 当它在后台终止时 - 不会丢失任何重要数据,例如应用程序内进度。在最坏的情况下,玩家可能需要从上次启动的检查点或关卡重新开始,但应用不应恢复到例如关卡 1。

你可能应该实现 applicationWillTerminate:以便执行最后一刻的家务步骤。

关于ios - Cocos2d 游戏从后台返回时自动重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25103261/

相关文章:

ios - iOS 中的电子邮件验证

ios - 仅获取用户对象 Firebase?

ios - 如何使用 swift 在点击 View 时隐藏 UI 元素?

ios - 什么是 URL 选项?

Objective-c NSMutableArray 释放行为

objective-c - Cocoa:获取 WebView mainFrame html 字符串

iphone - 如何在 Cocos2d 中创建 AI?

objective-c - UIImagePickerController 只工作一次

ios - CCAction block "tweening"

iOS:为什么带有 setCornerRadius 的 UITextField 会截断文本