• iOS App Programming Guide 要点记录


       跟上一篇一样,这篇也主要做一些要点记录


           1、app终止也当作app正常生命周期的一部分,如果app是被挂起的,是接收不到被终止的消息的。如果app正在运行或者app在后台但没被挂起,appdelegate是会接收到applicationWillTerminate:通知的。不管是用户还是系统要杀,通知行为是一样的。

       2、应该启动的时候当任务关系到构造正确的界面时才应该在主线程执行,其它任务都应该异步执行。

      

      3、iOS三类后台执行的情况
      (1)app启动了一个短暂的任务,当app进入后台时向系统申请更多时间把任务完成。
      (2)利用NSURLSession离线下载,这种情况就算程序被挂起或终止都是可以的。
      (3)要在后台运行的以支持某些特殊任务,如播歌,定位等。
     
      (1)申请时间执行任务比较简单,看代码一目然
    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
        bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{
            // Clean up any unfinished task business by marking where you
            // stopped or ending the task outright.
            [application endBackgroundTask:bgTask];
            bgTask = UIBackgroundTaskInvalid;
        }];
    
        // Start the long-running task and return immediately.
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    
            // Do the work associated with the task, preferably in chunks.
    
            [application endBackgroundTask:bgTask];
            bgTask = UIBackgroundTaskInvalid;
        });
    }

    但注意的是无论时自己任务执行完毕或者系统告诉你申请的时间已经到了的时候一定要调endBackgroundTask:告诉系统你可以被挂起了,不管你是否完成了你所做的任务。否则就会被系统杀掉。也可以通过backgroundTimeRemaining知道申请的时间剩余多少。

      (2) 对于后台下载可参考NSURLSession。但有些东西还是有必要了解和备注:如果是系统挂起或者说杀死app,它才会继续NSURLSession的后台任务,如果是用户主动杀掉应用,系统会取消掉所有未完成的下载任务。

      (3)允许后台运行的情况:
      app需要后台播放可以听得见的内容,如音乐。
      app需要后台录音
      app需要一直知道用户位置,如导行软件。
      app支持VoIP
      app需要经常性下载和处理新内容的,Background Fetch。
      apps需要经常接收外部更新 
     
      4、Background Fetch:这个要与申请后台时间有点似,建议不应该下载大内容。系统并不会保证一定会唤起你的应用并调用你的application:performFetchWithCompletionHandler:,它会平衡所有其它应用才决定要不要调你的。这里可以用作检查一些更新,配合NSURLSession的后台下载实现一些更好的功能。
     
      5、 本地通知可以在应用被挂起或着没在运行时也能给用户提醒。
      6、 只有一种情况用户主动杀掉程序后系统还会帮我们后台调起,那就是iOS8 之后的地理位置相关的应用。
      7、Being a Responsible Background App 做一个负责的后台应用,有点搞笑,也有点用。
    进入后台时我们可以为程序准备我们的截图给系统显示,使用snapshotViewAfterScreenUpdates:保证我们的应用更新后才会被截图,setNeedUpdates只会在下一runloop重绘不能保证。
     
    进入后台释放一些内存是个好习惯,减少被系统杀掉的可能。 
      8、重要的数据不可以生的数据放在document目录下,如别人发来的消息。
    caches目下放可再生的数据,并如果因系统要清理空间被系统删除,应用应该是要做到正常使用,不能受此影响
    应用升级只会保留document和library目录下的数据 
     
     
     

      

     
     
  • 相关阅读:
    硬件开源为什么如此之难?
    传智播客C++
    为什么我们要在指针前面加一个数据类型来限定那?
    天津大学仁爱学院教务网、图书馆以及数字化平台网址
    关于小米手机USB传输稍大点的文件老中断的问题解决方法!
    关于接地:数字地、模拟地、信号地、交流地、直流地、屏蔽地、浮地
    关于
    Android-APK签名
    Android-Activity跳转时动画
    Android-GridView 滑动条设置一直显示状态
  • 原文地址:https://www.cnblogs.com/chenxianming/p/5773282.html
Copyright © 2020-2023  润新知