6.后台处理

2021-10-20  本文已影响0人  LucXion

进入后台运行时,减少应用的内存占用是非常重要的,这样也可以将唤醒应用所需的时间降到最少。如果丢弃缓存信息,那么唤醒应用跟重新启动应用需要的时间差不多,也就没必要挂起应用了。一定要想清楚可以丢弃哪些对象,以及需要多少时间重新创建这些对象,每一项操作都会消耗电量,即使他们不会使应用明显变慢,也一定要避免不必要的处理。

可以使用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个通知。这不是让应用程序在后台无限制运行的机制。

状态恢复系统

  1. 状态保存必须成功执行。应用终止运行前必须进入后台运行状态。
  2. 应用不可以被强制退出。如果因为严重bug导致的应用强制退出,那么状态恢复可能会导致无限循环bug
  3. 从最近一次状态成功保存开始,没有启动失败过。如果在启动期间关闭程序,那么状态保存信息会被删除。恢复代码中的一个小bug可能会导致应用无法启动。

测试状态恢复的正确方法: 连接xcode启动应用,应用启动后返回桌面,停止运行xcode,重新运行应用。

上一篇 下一篇

猜你喜欢

热点阅读