进入后台运行时,减少应用的内存占用是非常重要的,这样也可以将唤醒应用所需的时间降到最少。如果丢弃缓存信息,那么唤醒应用跟重新启动应用需要的时间差不多,也就没必要挂起应用了。一定要想清楚可以丢弃哪些对象,以及需要多少时间重新创建这些对象,每一项操作都会消耗电量,即使他们不会使应用明显变慢,也一定要避免不必要的处理。
可以使用NSCache和NSPurgeableData。
将下载文件移动到目录
- (void)download {
NSURLSession *session;
NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithURL:[NSURL new] completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSString *fileName = location.lastPathComponent;
NSURL *desc = [self documentURLWithPath:fileName];
if ([[NSFileManager defaultManager]moveItemAtURL:location toURL:desc error:nil]) {
// 成功
}else {
// 失败
}
}];
[downloadTask resume];
}
- (NSURL*)documentURLWithPath:(NSString*)path {
static NSURL *documentDirectoryURL;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
documentDirectoryURL = [NSURL fileURLWithPath:docPath];
});
return documentDirectoryURL;
}
远程通知
苹果会自动管理发送的频率限制,服务器每发送一个通知,应用程序就会收到一个通知,但是可能会被批量处理。比如说,你每分钟发送一次,但是苹果要把你限制为每小时一次,那么应用程序会在每小时一次性收到60个通知。这不是让应用程序在后台无限制运行的机制。
状态恢复系统
- 状态保存必须成功执行。应用终止运行前必须进入后台运行状态。
- 应用不可以被强制退出。如果因为严重bug导致的应用强制退出,那么状态恢复可能会导致无限循环bug
- 从最近一次状态成功保存开始,没有启动失败过。如果在启动期间关闭程序,那么状态保存信息会被删除。恢复代码中的一个小bug可能会导致应用无法启动。
测试状态恢复的正确方法: 连接xcode启动应用,应用启动后返回桌面,停止运行xcode,重新运行应用。
网友评论