1. 程式人生 > >讓程式掛起後,能在後臺繼續執行任務

讓程式掛起後,能在後臺繼續執行任務

原文出自:www.hangge.com 轉載請保留原文連結:http://www.hangge.com/blog/cache/detail_811.html
1,程式的掛起和退出
由於iOS裝置資源有限。當用戶點選了home鍵,或者另一個應用程式啟動了。那麼原先那個程式便進入後臺被掛起,不是退出,只是停止執行程式碼,同時它的記憶體被鎖定。當應用程式恢復時,它會從停止的位置重新開始。

2,如下特殊的應用程式可以在後臺長時間的執行
(1)在後臺播放音訊的應用程式可以在任意長的時間內保持活動狀態,直到使用者開始從另一個App播放音樂為止。
(2)在後臺跟蹤使用者位置的應用程式可以執行任意長的時間。
(3)諸如Skype之類的網路協議電話(VoIP)應用程式可以定期執行,以向伺服器簽到,但除非正在進行通話,否則不允許不加限制地執行。

3,申請程式在後臺短時執行
(1)除了上述的特殊應用,App進入後臺時便自動掛起。但我們可以申請該應用在後臺能短時間執行。但這個時長不能超過10分鐘。
(2)後臺短時執行的存在是為了讓應用程式能夠完成一個需要長時間執行的過程。比如將大型檔案寫會磁碟,完成下載,或者像即時通訊軟體給對方發照片(選擇傳送後,即使進入後臺,也能繼續傳送)。
(3)在10分鐘結束時,應用程式必須告訴OS,它已經完成或者被終止。
(4)注意:並不能保證用於後臺任務的額外時間是連續的,這些時間可能會被分為很多段,以延長電池壽命。

4,通過樣例演示如何在後臺執行任務
主頁面上通過定時器不斷的打印出數字。還有個開關按鈕,切換選擇程式進入後臺後是否繼續執行。
開關開啟時,按home鍵退出應用,過一會兒再回來,可以發現數字在後臺還會一直列印數字。開關關閉,程式進入後臺即掛起,不會再列印數字。
(這個需要使用真機測試,模擬器比較特殊,不管什麼情況程式進入後臺都會一直執行)
這裡寫圖片描述

這裡寫圖片描述

— ViewController.swift —

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textView: UITextView!

    @IBOutlet weak var mySwitch: UISwitch!

    var i=0

    override func viewDidLoad() {
        super.viewDidLoad()

        //建立定時任務
        _ = NSTimer.scheduledTimerWithTimeInterval(1
, target:self,selector:Selector("tickDown"), userInfo:nil,repeats:true) } //計時器每秒觸發事件 func tickDown() { textView.text! += "\(i++) " } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }

— AppDelegate.swift —

import UIKit
 
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
 
    var window: UIWindow?
     
    //後臺任務
    var backgroundTask:UIBackgroundTaskIdentifier! = nil
 
 
    func application(application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        return true
    }
 
    func applicationWillResignActive(application: UIApplication) {
    }
 
    func applicationDidEnterBackground(application: UIApplication) {
        let controller:ViewController = self.window?.rootViewController as! ViewController
        controller.textView.text! += "進入後臺 "
         
        //如果已存在後臺任務,先將其設為完成
        if self.backgroundTask != nil {
            application.endBackgroundTask(self.backgroundTask)
            self.backgroundTask = UIBackgroundTaskInvalid
        }
         
        //如果要後臺執行
        if controller.mySwitch.on {
            //註冊後臺任務
            self.backgroundTask = application.beginBackgroundTaskWithExpirationHandler({
                () -> Void in
                //如果沒有呼叫endBackgroundTask,時間耗盡時應用程式將被終止
                application.endBackgroundTask(self.backgroundTask)
                self.backgroundTask = UIBackgroundTaskInvalid
            })
        }
    }
 
    func applicationWillEnterForeground(application: UIApplication) {
    }
 
    func applicationDidBecomeActive(application: UIApplication) {
    }
 
    func applicationWillTerminate(application: UIApplication) {
    }
}

相關推薦

程式後臺繼續執行任務

原文出自:www.hangge.com 轉載請保留原文連結:http://www.hangge.com/blog/cache/detail_811.html 1,程式的掛起和退出 由於iOS裝置資源有限。當用戶點選了home鍵,或者另一個應用程式啟動了。那

ubuntu解決喚醒

安裝 laptop-mode 如果你不缺認自已是否安裝了laptop-mode-tools工具包,可以在終端中輸入下列命令來確認是否安裝。 dpkg -l | grep laptop-mode-tools 如果你的電腦執行命今後無結果輸出,那麼你可以通過下列命令來安裝

微信小程式在掃一掃進入小程式的時候 安卓手機後臺繼續執行的常規處理

一般在掃一掃進入小程式是沒什麼問題的 關於這個話題就不多說 怎麼去配置後臺 我的部落格裡面有提到 有興趣的可以去看看 現在是使用者第一次掃碼進入之後 退出小程式 在外部掃一掃進入小程式指定介面的時候 安卓手機就出現了一個問題 它會閃爍一下 返回的首頁去 而不是我們想要的 因為安卓手機有一個常規的操作 就是微信

【已解決】如何PHP返回AJAX繼續後臺執行。(附完整程式碼)

【場景】 使用者上傳檔案,給PHP伺服器傳送AJAX檔案及表單。 若插入身份驗證成功+插入資料庫成功,則及時返回success的AJAX資訊。 後臺繼續執行,把檔案上傳到第三方檔案伺服器。 【遇到的問題-1】 PHP持久執行,這種教程網上很多了。但我遇到了個問題,就

IP-MAC綁定禁止私接路由和隨身WIFI嗎?

路由 wifi 隨著移動終端使用越來越廣泛,WIFI也是漫天遍野都是,但是企業局域網裏面私接路由或者電腦上插了隨身WIFI,看視頻或者下載什麽,對於局域網帶寬消耗很大,最直接的也非常影響了工作狀態。如果把IP綁定以後,能否杜絕這一現象呢?一半的一半,私接路由可以拒絕,但是隨身WIFI不行。1. 先說私

dede在使用session共享會話dede後臺無法訪問報錯500

dede sessiondede在使用session共享會話後,dede後臺無法訪問,報錯500:解決方法:修改文件一:vim /application/nginx/html/www/include/common.inc.php137 //$sessSavePath = DEDEDATA."/ses

關於心跳ajax請求pending狀態(被stalled時間過長的問題。涉及tcp連接異常。

.net section 解決 5.1 網絡問題 chrome瀏覽器 time iou 數據包 環境:景安快雲服務器(聽說很垃圾,但是公司買的,我也剛來),CentOS-6.8-x86_64,Apache,MySQL5.1,P

vs2015 出現"重新啟動處於狀態請重新啟動visual studio"的解決辦法

在安裝vs之後或者VS2015安裝:Windows 10 SDK,安裝程式提示重新啟動,我點取消後,然後再次點選就提示:重新啟動處於掛起狀態,請重新啟動visual studio。 現象: 1.安裝結束提示重新啟動,可能有其它要處理,點選了取消; 2.安裝結束提示重啟,

看完阿里、京東、騰訊程式設計師薪資網友直呼:好老闆都是別人家的

現在是網際網路的時代,2018年中國富豪榜中,上榜的10位企業家中,6位都是網際網路公司的老闆,可見其財富的快速積累。公司發展勢頭越好,那麼公司的程式設計師們的工資情況又如何呢,下面小編和大家說說阿里巴巴、京東、騰訊三家網際網路巨頭公司的程式設計師福利待遇。 一、阿里巴巴  

程式設計師離職公司程式開始異常 網友:離開前成功完成了報復

我們都生活在一個浮躁的社會中,追名逐利,樂此不彼。公司就像是一座圍城,裡面的人想要出去,外面的人想要進來。所以,來來走走,走走停停,人也就浮躁了。今日這家公司給出薪酬高我在這家,明日哪家更高要我去我也就走了。 在這奔波的路上,我們寢食無憂。網上說:是袁隆平爺爺讓

TP5中註冊路由後臺無法獲取傳遞變數之解決

因為專案需要,隱藏url中的敏感路徑,就使用到了Tp5中的專案下route.php,但是按著手冊修改route.php後在後臺控制器中獲取不到引數值: 1、前提在config.php中新增: 'url_route_on'  =>  true,  //開啟路由 2、然

C#:程式視窗關閉退到托盤圖示

using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace WindowsFormsApp21 { public partial class

解決jdk環境變數設定完在cmd中執行javac出現’javac‘不是內部或外部命令也不是可執行程式或批處理檔案的錯誤提示

我的jdk'和jre都安裝在java_jdk這個資料夾下,如上圖所示。 在環境變數中的path和classpath的引數配置如下: 變數名:JAVA_HOME    變數值:F:\java_jdk\jdk1.8 變數名:Path                  變數值:

【已解決】電腦無法開機

前兩天,博主的電腦遭遇了一個奇怪的現象:上午用的時候還好好的,因為需要從之前的工作繼續,所以點選了“掛起”;下午回來再開機就悲劇了,伺服器無法完成自檢,很小的聲音,也就沒有辦法開機了。今天叫了售後過來,順利解決。在這裡把解決方案分享出來。更新於2018.12.18。 斷電,開

Fiddler建好代理連到手機但手機不上網了求破有果

依次 tools(工具) >>   fiddler options(fiddler選項)   >>   connections( 連線) >>allow remote computers to connect (允許遠端電腦連線) 應該沒

spring boot jar 程序自動停止自動終止後臺持續執行

第一次部署spring boot 到linux上,用命令java -jar **.jar,發現應用自動退出,程序停止了。後來發現要不掛斷的執行命令,忽略所有的結束通話訊號,用以下命令解決 nohup java -jar **.jar& nohup: 不掛斷的執行命令,忽略所有

程式公測你可以關注這些

從小程式開放公測,不少人就在當天就提交公司資料去申請了,稽核也很快通過,小程式的名稱不能喝公眾號的名稱一樣,出現的情況是很多人去搶佔小程式的名稱,微信那邊明確了小程式的規則,為了方便參與小程式的取名,微信那邊允許小程式名稱用“+”,意思應該是服務號或公眾號的加強版,並且允許改名,不過時間是一年一次,其他資料修

ubuntu 無法喚醒的解決辦法

      唉,今日到圖書館,一下就把電腦關上了,沒有使用什麼 poweroff 關機,直接讓他掛起,然後突然發現不能喚醒了。於是我就直接關機,使用windows系統去查尋一下解決辦法。然而有的解決辦法並不完整。    下面我就來做點筆記,以備後用。     1、sudo apt-get install pm

python paramiko導致程式(待續)

發現問題 幾天前做基於tornado的web系統的時候,啟動系統後發現無法訪問,而且監聽特定埠只能同時開啟一個程序的web程式居然能開啟無限多個,使用netstat -ano |grep 埠號發現web程式根本沒有佔用埠,說明程式根本沒有啟動成功,在程式中打斷

呼叫libvlc_media_player_stop經常會導致程式

最近使用libvlc時碰到這個問題。google了一下。在官方論壇上也很多人碰到這個問題。但是都沒有提供比較好的解決辦法。 VLC社群的人本來時間就不多,有限的精力都花在VLC本身上了,沒有空理會libvlc上出現的問題。 除非哪天整個VLC都在libvlc上搭建,社群的人