当应用程序处于后台时,iOS销毁UI
我正在使用CoreLocation在后台使用我的应用程序。 更准确地说,我正在使用重大更改(当应用程序处于后台时,iOS销毁UI,ios,user-interface,background,core-location,Ios,User Interface,Background,Core Location,我正在使用CoreLocation在后台使用我的应用程序。 更准确地说,我正在使用重大更改(startmonitoringsignifictlocationchanges)或始终打开(startupdatinglocation),具体取决于服务器配置 在这两种情况下,应用程序生命周期是不同的: 使用startmonitoringsignificantlocationchanges将应用程序注册到操作系统,操作系统将冻结或终止应用程序。当接收到新的位置事件时,它将被唤醒,并使用特定的启动键调用d
startmonitoringsignifictlocationchanges
)或始终打开(startupdatinglocation
),具体取决于服务器配置
在这两种情况下,应用程序生命周期是不同的:
- 使用
将应用程序注册到操作系统,操作系统将冻结或终止应用程序。当接收到新的位置事件时,它将被唤醒,并使用特定的启动键调用startmonitoringsignificantlocationchanges
didfishlaunchingwithoptions
- 使用
,应用程序将一直运行,直到调用startupdatinglocation
。然后应用程序将被冻结,直到操作系统在需要更多内存时终止应用程序stopdatinglocation
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的图像,它们将进入缓存,当应用程序进入后台时,该缓存将自动清空。相反,如果你用其他方法加载一组图像,你有责任在内存警告期间清除它们,因为应用程序在后台处于活动状态。如果你处理了这个问题,你已经在释放内存了