【问题标题】:iOS - update UI from backgroundiOS - 从后台更新 UI
【发布时间】:2013-05-22 19:19:07
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ios objective-c google-maps mapkit background-foreground


    【解决方案1】:

    您不能也不应该在后台更新 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
     }
    

    【讨论】:

    • 我不太明白你所说的在超过阈值时“重置”用户界面是什么意思。
    • 重置为 in,使 UI 的行为就像用户刚刚从新启动中打开屏幕一样。
    • 所以一旦我超过了这个阈值,我就不会显示叠加层?如何显示数据?
    • 用一些伪代码更新了答案
    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2015-07-20
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多