从背景返回时,Cocos2d游戏重新启动

时间:2014-08-03 09:19:01

标签: ios objective-c cocos2d-iphone

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

  • 打开游戏
  • 按主页按钮
  • 打开Safari
  • 返回游戏

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

  • 在iOS 6和7上发生
  • 似乎不是特定于设备的:在iPhone 4,4s,5 ...以及iPod和iPad上也会出现。
  • 似乎打开一个不同的应用程序(如Safari)是必要来重现这一点。如果您只需按主页按钮并重新打开应用程序,它就不会重新启动。
  • 这不太可能是由于内存错误造成的 - 这个错误可以在游戏的标题屏幕上重现,这很轻松。
  • 这些设备没有越狱。
  • 无论您是否登录游戏中心,都会发生。

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

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];
}

这一切似乎都是有序的。

那会发生什么呢?

1 个答案:

答案 0 :(得分:1)

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

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

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

您应该实施applicationWillTerminate:以执行任何最后一刻的家庭住宅步骤。