2017-03-08 64 views
0

我想在我的ios應用程序中實現圖像同步。這就是我所做的是如何編寫在用戶按主頁按鈕時不會暫停的代碼

  1. 拍照
  2. 上傳照片火力
  3. 得到火力存儲網址,並將其發送到API服務器,使服務器存儲信息的數據庫

只要應用程序正在運行,它就可以正常工作,但是當我按下主屏幕按鈕退出應用程序時,所有事件都會暫停。

那麼如何運行一個代碼,不會暫停,如果應用程序進入主頁?

回答

1

按照這個文件,

對於需要更多的執行時間來實現的任務,必須 要求特定權限在後臺運行它們,而不 他們被暫停。在iOS中,只有特定的應用程序類型允許 在後臺運行:

  • 應用程式播放音頻內容給用戶,而在後臺, 如音樂播放器應用程序

  • 應用該記錄的音頻內容,而在告訴用戶他們的位置在所有 倍,S的 後臺應用UCH作爲導航的應用程序,支持互聯網語音 協議(VoIP)

  • 應用程序需要下載和處理新的內容 定期

  • 接收定期更新

    Apps的應用來自外部配件

  • 應用實現這些服務必須申報服務,他們 支持和使用的系統框架,以執行的 相關方面的服務

聲明的服務讓系統知道你使用的 服務,但在某些情況下,實際上會阻止您的應用程序被掛起的系統框架。

鏈接:https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

這裏是如何實現(從this answerAshley Mills拍攝):

func doUpdate() { 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { 

    let taskID = beginBackgroundUpdateTask() 

    var response: NSURLResponse?, error: NSError?, request: NSURLRequest? 

    let data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error) 

    // Do something with the result 

    endBackgroundUpdateTask(taskID) 

    }) 
} 

func beginBackgroundUpdateTask() -> UIBackgroundTaskIdentifier { 
    return UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({}) 
} 

func endBackgroundUpdateTask(taskID: UIBackgroundTaskIdentifier) { 
    UIApplication.sharedApplication().endBackgroundTask(taskID) 
} 
+0

得到錯誤與迅速3.可以ü請更新答案 – Mahabub

+0

不幸的是,我沒有經驗與迅速編程。上面的代碼是從SO上的答案引用的。 –

0

[Swift3]這是一種工作對我來說

func doUpdate() { 
    DispatchQueue.global(qos: .background).async { 
     let taskID = self.beginBackgroundUpdateTask() 
     DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5), execute: { 
      print("printing after 10 min") 
     }) 
     DispatchQueue.main.async { 
      self.endBackgroundUpdateTask(taskID: taskID) 
     } 
    } 
} 


func beginBackgroundUpdateTask() -> UIBackgroundTaskIdentifier { 
    return UIApplication.shared.beginBackgroundTask(expirationHandler: {}) 
} 


func endBackgroundUpdateTask(taskID: UIBackgroundTaskIdentifier) { 
    UIApplication.shared.endBackgroundTask(taskID) 
} 

不知道這是完成最大時間是什麼,因爲我看到有一個expirationHandler

+1

根據本教程,https://www.raywenderlich.com/143128/background-modes-tutorial-getting-started,在過去,這種模式通常用於完成上傳或下載,並且慷慨(但不能保證)提供了10分鐘來完成這些任務。 –

相關問題