iOS - 后台更新UI

3
有很多关于如何从后台线程更新UI的问题在SO上。这个问题有点不同——我想知道当我的应用程序实际处于后台时,如何更新UI。以下是我的问题:
我尝试了MapKit和Google的映射SDK。我发现我更喜欢Google的(更简单、更简洁易管理;MapKit涉及大量样板代码,更不用说iOS 6中MapKit的内存使用有显着问题)。然而,我发现如果例如记录用户路径,创建带有轨迹的覆盖物/折线时,当应用程序转到后台时,通常会出现显著的延迟或冻结期,当应用程序返回前台时。当应用程序进入后台时,屏幕上的折线好像不再更新,当应用程序返回前台时,它必须“赶上”,这可能需要一段时间。我偶尔因为应用程序恢复时间过长而崩溃。
所以我的问题是:如何强制更新UI,即使应用程序在后台运行,以便在应用程序恢复时消除这种“赶上”期?
如果有任何不清楚的内容,我可以添加任何代码/解释。谢谢!
1个回答

2
您不能在后台更新UI,也不应该这样做。您最好的选择是在后台数据记录上设置一个阈值。在阈值内时,进入前台时“赶上”UI。在超出阈值时,进入前台时重置UI。当跨越阈值时,数据应保持足够进行重置(而不是整个历史记录)。在阈值之前,保持所有数据。
应用程序流程:
1. 应用程序启动 2. 收集并显示覆盖层上的数据 3. 应用程序进入后台 4. 继续收集数据
然后在进入前台时:
 if (appForegroundBeforeTooMuchData) {
       //Update Overlay
 } else { 
       //We have too much data to update the overlay smoothly, store the data and start a *new session* on foreground
       //Behave as if user just started the app
 }

当阈值被跨越时,你所说的“重置”UI是什么意思,我并不完全明白。 - eric.mitchell
重置,即使UI的行为就像用户刚刚从新启动屏幕一样。 - Zaid Daghestani
那么,一旦我通过了这个阈值,我就不显示覆盖层了吗?那我该如何显示数据呢? - eric.mitchell
更新了答案,加入了一些伪代码。 - Zaid Daghestani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接