ios - 我的应用程序的恢复时间很长

标签 ios objective-c ipad opengl-es

我不确定对此可以做些什么。我的应用程序是一个 iPad 应用程序,我使用了大约 300MB 的内存。在任何给定时间为游戏加载了大约 250MB 的纹理。

问题来了。当我让 iPad 休眠时,如果我让 iPad 休眠几分钟然后回到我的游戏中,它会在几秒钟内再次变得可以玩。如果我在玩完我的游戏后让 iPad 处于 sleep 状态,或者当我的游戏仍在运行大约 1 天时,然后我返回,我的游戏需要大约 3.5 分钟才能恢复。这不是错误,我已经多次查看调试器,一切都按预期工作。 iOS 必须从某个地方恢复堆,这比从头开始加载游戏花费的时间大约长 10 倍。

我目前的解决方案是忘记恢复,我故意让我的应用程序崩溃,以便它在离开后自行重启,这让我以大约 10 倍的速度恢复到相同状态。但我不喜欢这种解决方案。

有没有人遇到过这样的问题?在 iPad 休眠几个小时后,我应该调用 api 还是可以缩短恢复时间的东西?是否在任何地方记录了此问题?

最佳答案

My current solution is to forget about restoring and I intentionally crash my app so it restarts itself after it has been away which gets me to the same state about 10 times faster. But I don't like this solution.

这是确保您的应用程序不会被批准在 App Store 上分发的有保证的方法。这个问题有两种解决方案:

1) 重新设计您的游戏。对此有多种技术,包括:

将关卡分解成更小的部分,因此每个阶段需要加载的 Assets 更少。

缩小纹理和 Assets 。例如,使用 256x256 纹理而不是 512x512。一个 512x512 纹理占用四个 256x256 纹理的空间。您愿意在几秒钟内在一个场景中加载四个纹理,还是 1 个?

压缩你的纹理。与未压缩的同类相比,压缩后的纹理更小且加载速度更快。

您的应用程序甚至无法在原始 iPad Mini 上运行,因为它是 RAM - 它有 512MB,而您目前正在尝试在任何给定时间使用 300MB。

2) 禁止您的应用留在后台。

每次您的应用程序失去焦点(除了锁定屏幕被切换),它会强制自己从头开始重新加载……就像您现在已经在强制崩溃时所做的那样。见:

If you never want your app to enter the background set the UIApplicationExitsOnSuspend key in your application’s Info.plist file to YES

How to exit app while enter background

这些是我的建议,但老实说,如果可能的话,我会做第一个。这需要更多的工作,但在内存管理方面,您将能够制作一个更礼貌的 iOS 应用程序另外您将能够针对更多设备。

关于ios - 我的应用程序的恢复时间很长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31151165/

相关文章:

仅与 https 通信的 iOS 应用程序和 Apple Transport Security Impact

iphone - 如何将 NSTimeInterval 值存储到 NSMutableArray 中?

javascript - 用户代理,如何自动为不同的设备设置不同的 css 文件

Javascript 音频在浏览器中播放,但不在 iOS 设备上播放

html - ios 上自定义图标字体上的奇怪水平线

ios - 如何阅读通知中的文字?

ios - 向 Storyboard添加额外的预览设备 Xcode 10+

ios - NSDateFormatter 总是返回 nil

objective-c - Objective-C 中的外部;他们的行为与 C 不同吗?

iphone - 使用 Objective C 从 RGB 转换为 HSL