iOS App Programming Guide 要點記錄

   跟上一篇同樣,這篇也主要作一些要點記錄html


       一、app終止也看成app正常生命週期的一部分,若是app是被掛起的,是接收不到被終止的消息的。若是app正在運行或者app在後臺但沒被掛起,appdelegate是會接收到applicationWillTerminate:通知的。無論是用戶仍是系統要殺,通知行爲是同樣的。ios

   二、應該啓動的時候當任務關係到構造正確的界面時才應該在主線程執行,其它任務都應該異步執行。app

  

  三、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的後臺任務,若是是用戶主動殺掉應用,系統會取消掉全部未完成的下載任務。async

  (3)容許後臺運行的狀況:
  app須要後臺播放能夠聽得見的內容,如音樂。
  app須要後臺錄音
  app須要一直知道用戶位置,如導行軟件。
  app支持VoIP
  app須要常常性下載和處理新內容的,Background Fetch。
  apps須要常常接收外部更新 
 
  四、Background Fetch:這個要與申請後臺時間有點似,建議不該該下載大內容。系統並不會保證必定會喚起你的應用並調用你的 application:performFetchWithCompletionHandler:,它會平衡全部其它應用才決定要不要調你的。這裏能夠用做檢查一些更新,配合NSURLSession的後臺下載實現一些更好的功能。
 
  五、 本地通知能夠在應用被掛起或着沒在運行時也能給用戶提醒。
  六、 只有一種狀況用戶主動殺掉程序後系統還會幫咱們後臺調起,那就是iOS8 以後的地理位置相關的應用。
  七、Being a Responsible Background App 作一個負責的後臺應用,有點搞笑,也有點用。
進入後臺時咱們能夠爲程序準備咱們的截圖給系統顯示,使用 snapshotViewAfterScreenUpdates:保證咱們的應用更新後纔會被截圖,setNeedUpdates只會在下一runloop重繪不能保證。
 
進入後臺釋放一些內存是個好習慣,減小被系統殺掉的可能。 
  八、重要的數據不能夠生的數據放在document目錄下,如別人發來的消息。
caches目下放可再生的數據,並若是因系統要清理空間被系統刪除,應用應該是要作到正常使用,不能受此影響
應用升級只會保留document和library目錄下的數據 
 
相關文章
相關標籤/搜索