3

关于从后台线程更新 UI 有很多关于 SO 的问题。这个问题有点不同——我想知道当我的应用程序实际上在后台时如何更新 UI。这是我的问题:

我已经尝试过 MapKit 和 Google 的映射 SDK。我发现我更喜欢 Google 的(管理起来更简单和简洁;MapKit 涉及大量样板代码,更不用说 MapKit 在 iOS 6 中的内存使用存在重大问题)。然而我发现,例如,如果我正在记录用户的路径,创建带有轨迹的叠加/折线,当应用程序进入后台时,当应用程序返回到后台时,通常会出现明显的延迟或冻结期前景。当应用程序进入后台时,屏幕上的折线似乎不再更新,而当应用程序返回前台时,它必须“赶上”,这有时可能需要一段时间。由于应用程序恢复时间过长,我偶尔会发生崩溃。

所以我的问题是:即使应用程序在后台,我如何才能强制更新 UI,以便在我的应用程序恢复时消除这个“赶上”时期?

我可以为任何不清楚的地方添加任何代码/解释。谢谢!

4

1 回答 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
 }
于 2013-05-22T19:27:19.413 回答