当应用程序处于后台时,iOS销毁UI

当应用程序处于后台时,iOS销毁UI,ios,user-interface,background,core-location,Ios,User Interface,Background,Core Location,我正在使用CoreLocation在后台使用我的应用程序。 更准确地说,我正在使用重大更改(startmonitoringsignifictlocationchanges)或始终打开(startupdatinglocation),具体取决于服务器配置 在这两种情况下,应用程序生命周期是不同的: 使用startmonitoringsignificantlocationchanges将应用程序注册到操作系统,操作系统将冻结或终止应用程序。当接收到新的位置事件时,它将被唤醒,并使用特定的启动键调用d

我正在使用CoreLocation在后台使用我的应用程序。 更准确地说,我正在使用重大更改(
startmonitoringsignifictlocationchanges
)或始终打开(
startupdatinglocation
),具体取决于服务器配置

在这两种情况下,应用程序生命周期是不同的:

  • 使用
    startmonitoringsignificantlocationchanges
    将应用程序注册到操作系统,操作系统将冻结或终止应用程序。当接收到新的位置事件时,它将被唤醒,并使用特定的启动键调用
    didfishlaunchingwithoptions
  • 使用
    startupdatinglocation
    ,应用程序将一直运行,直到调用
    stopdatinglocation
    。然后应用程序将被冻结,直到操作系统在需要更多内存时终止应用程序
我的问题

我正在使用一个SDK(由我的公司开发),它应该在基于CoreLocation服务的后台运行。SDK被初始化并附加到
UIApplicationLegate

我想在后台延迟一段时间后杀死所有UI元素,以避免UI中无用的数据处理(计时器、刷新、回调等),因为应用程序是在后台运行的,
startUpdatingLocation

稍后将在
applicationIDBECOMEACTIVE
中启动UI(从零开始)

以下是我尝试过的:

1/删除项目设置中的自动情节提要启动

2/在
didfishlaunchingwithoptions中手动启动故事板

// Instantiate the initial view controller object from the storyboard
UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
_window = [[UIWindow alloc] init];
_window.rootViewController = [story instantiateInitialViewController];
[_window makeKeyAndVisible];
3/I(试图)在
ApplicationIdentinterBackground

UINavigationController *vc = (UINavigationController *)_window.rootViewController;
_window.rootViewController = nil;
_window = nil;
4/I在视图控制器中每隔2秒安排一个计时器,其中包含一个NSLog

5/使用上述代码,当应用程序处于后台时,视图控制器不会被破坏,计时器仍会被调用


有什么想法吗?

当你的应用程序在后台运行时,你要对无效的计时器等负责,并且没有必要关闭UI。系统知道这一点。唯一有效的就是你的后台服务。@Andrea UI不会不必要地消耗内存,这会让应用程序在后台更快地死掉吗?据我所知(3d游戏除外)是一个管理UI作为后台层的系统。如果加载名为ImageName的图像,它们将进入缓存,当应用程序进入后台时,该缓存将自动清空。相反,如果你用其他方法加载一组图像,你有责任在内存警告期间清除它们,因为应用程序在后台处于活动状态。如果你处理了这个问题,你已经在释放内存了