1. 程式人生 > >iOS後臺執行模式(background execution mode)

iOS後臺執行模式(background execution mode)

參考網址:https://developer.apple.com/library/prerelease/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH4-SW1

http://www.jianshu.com/p/174fd2673897

官方文件描述:

Implementing Long-Running Tasks

For tasks that require more execution time to implement, you must request specific permissions to run them in the background without their being suspended. In iOS, only specific app types are allowed to run in the background:

  • Apps that play audible content to the user while in the background, such as a music player app

  • Apps that record audio content while in the background

  • Apps that keep users informed of their location at all times, such as a navigation app

  • Apps that support Voice over Internet Protocol (VoIP)

  • Apps that need to download and process new content regularly

  • Apps that receive regular updates from external accessories

Apps that implement these services must declare the services they support and use system frameworks to implement the relevant aspects of those services. Declaring the services lets the system know which services you use, but in some cases it is the system frameworks that actually prevent your application from being suspended.

Declaring Your App’s Supported Background Tasks

Support for some types of background execution must be declared in advance by the app that uses them. In Xcode 5 and later, you declare the background modes your app supports from the Capabilities tab of your project settings. Enabling the Background Modes option adds theUIBackgroundModes key to your app’s Info.plist file. Selecting one or more checkboxes adds the corresponding background mode values to that key. Table 3-1 lists the background modes you can specify and the values that Xcode assigns to the UIBackgroundModes key in your app’sInfo.plist file.

Table 3-1  Background modes for apps

Xcode background mode

UIBackgroundModes value

Description

Audio and AirPlay

audio

The app plays audible content to the user or records audio while in the background. (This content includes streaming audio or video content using AirPlay.)

The user must grant permission for apps to use the microphone prior to the first use; for more information, see .

Location updates

location

The app keeps users informed of their location, even while it is running in the background.

Voice over IP

voip

The app provides the ability for the user to make phone calls using an Internet connection.

Newsstand downloads

newsstand-content

The app is a Newsstand app that downloads and processes magazine or newspaper content in the background.

External accessory communication

external-accessory

The app works with a hardware accessory that needs to deliver updates on a regular schedule through the External Accessory framework.

Uses Bluetooth LE accessories

bluetooth-central

The app works with a Bluetooth accessory that needs to deliver updates on a regular schedule through the Core Bluetooth framework.

Acts as a Bluetooth LE accessory

bluetooth-peripheral

The app supports Bluetooth communication in peripheral mode through the Core Bluetooth framework.

Using this mode requires user authorization; for more information, see .

Background fetch

fetch

The app regularly downloads and processes small amounts of content from the network.

Remote notifications

remote-notification

The app wants to start downloading content when a push notification arrives. Use this notification to minimize the delay in showing content related to the push notification.


第一部分

1.先說說iOS 應用程式5個狀態:

停止執行-應用程式已經終止,或者還未啟動。

不活動-應用程式處於前臺但不再接收事件(例如,使用者在app處於活動時鎖住了裝置)。

活動-app處於“使用中”的狀態。

後臺-app不再螢幕上顯示,但它仍然執行程式碼。

掛起-app仍然駐留記憶體但不再執行程式碼。

按下Home鍵時,app從活動狀態轉入後臺,絕大部分app通常在幾秒內就從後臺變成了掛起。

在記憶體吃緊的時候,iphone會首先關閉那些掛起的app。

從 iOS 4 開始,應用就可以在退到後臺後,繼續執行一小段時間(10 分鐘);

2.還可以把自己宣告為需要在後臺執行,就能不限時地運行了。

不過限制為播放音樂、使用 GPS 、voip、。 值得一提的是,有的應用為了達到後臺不限時執行的目的,在後臺播放無聲的音樂(稽核不一定會被發現)。

iOS 5 開始又多了一種型別:下載報刊雜誌。

然後 iOS 7 則可以下載各種玩意和定時抓取。

iOS 7 需要注意的區別:iOS 7 以前,應用進入後臺繼續執行時,如果使用者鎖屏了,那麼 iOS 會等待應用執行完,才進入睡眠狀態。而在 iOS 7 上,系統會很快進入睡眠狀態,那些後臺應用也就暫停了。如果收到事件被喚醒(例如定時事件、推送、位置更新等),後臺應用才能繼續執行一會。因為處理過程變成了斷斷續續的,因此下載時也要使用 NSURLSession 來處理(即下文中的 Background Transfer Service)。

3. 在我看來,蘋果限制 app在後臺執行,是為了更有效的利用硬體使用當前的app,不然,過多的app駐留後臺,對手機資源佔用是一大問題。

二. ios7以後提供的後臺介面模式

1、Background Audio,這是後臺的音訊,這個很早之前便有,也是iOS裝置中用得最多的後臺應用,呼叫這個介面可以實現後臺的音樂播放。

2、Location Services,這是後臺的定位,系統會擁有統一頁面進行管理。

3、VoIP,後臺語音服務,類似Skype通話應用需要呼叫,可進行後臺的語音通話。

4、Newsstand,報刊雜誌後臺自動下載更新,其能夠自動實時更新。

5、Background Task  Completion,這個介面早在iOS 4時候便擁有,其可以供任意型別的APP使用,不過在舊系統中,這個介面的後臺限制執行時間僅為10分鐘,意味著當應用退至後臺,其後臺執行僅能持續10分鐘便會轉至休眠狀態。iOS 7中對這個介面作出了改變,原來的為連續10分鐘,即不論你這10分鐘內使用者是否關閉螢幕進入休眠狀態,應用仍然會在後臺等待10分鐘完結後推出,而新的改進為假如遇到關閉螢幕休眠的情況,這後臺執行的10分鐘便會跟隨一同休眠,剩餘的後臺時間將會留待使用者再一次喚醒裝置才計算。這樣後臺執行的時間仍然為10分鐘,但並不連續,這樣做的優點為省電。

如現在有一些詞典應用帶有後臺複製選詞功能,實際上其是利用了這個介面,如果使用者開啟詞典後並推出,即使螢幕關閉,但詞典仍然在後臺執行,電量消耗還是比較大的,在iOS 7上,這個問題可以得到解決。

6、 Remote Notification,這是本次較大的一個改進介面,以往聊天類應用接受推送後點進去需要再收一次資訊,這情況在QQ、微信等應用上最為明顯。不過擁有了這個介面後,這情況將不復存在,以後推送將能夠直接啟動後臺任務。值得注意的是remote notification支援silent notification(靜默推送),這樣dropbox這類同步應用可以在後臺以最節能的模式實時靜默同步了,類似布卡漫畫這種也可以推送正在追的漫畫的新章節並在後臺靜默下載,待到下載好再給使用者傳送一個本地推送,使用者點開即看無需再聯網。

7、Background Transfer Service,後臺上傳下載。iOS最接近傳統多工的後臺介面,可供任意型別的app呼叫,無時間限制。應用場景包括後臺上傳和下載資料,這使得遊戲後臺更新資料包,後臺上傳視訊等等都成為可能,但是正如其名字,它只能用於處理上傳下載這種傳輸類的任務,類似後臺剪下板監控這種它就無能為力了。

iOS 7新增的background fetch,這個後臺介面在蘋果WWDC 2013上有提及,其會根據使用者行為自動調整達到效率最優的後臺模式,能夠處理不是很有時效性的資訊獲取。例如一些社交、新聞類的應用的後臺資訊更新,iOS系統便會根據應用啟動頻率、時間和當前網路和電量的狀況來智慧分配每個應用的後臺獲取頻率和啟動時長。

三 .  當前社交專案,如何使用ios後臺

1.當前專案特點:

a. 在儲存長連線的情況下,使用者一直線上,才能即時接收到訊息;

b. 在初始化連線的時候,需要做很多處理,如果經常連線,必然很耗電, 所以盡力在後臺的時候,不是時常斷開後又連線;

2. 通過以上分析,改選用何種方式來儲存app後臺執行

voip不行;

靜音播放,不清除這種方式,是否可以通過稽核;

vpns推送,可取的方式,(具體方法: 使用者在登入後,傳送一個裝置的tokenid; 在傳送訊息時,平臺根據對方是離線還是線上,來判斷要不要發推送訊息)

3.background fetch在該專案中的應用

由於該app在初始化時,需要耗點時間,最好的方式就是通過  後臺獲取  來處理該工作,這樣能保證使用者的流暢體驗。

第二部分:保持程式在後臺長時間執行

iOS為了讓裝置儘量省電,減少不必要的開銷,保持系統流暢,因而對後臺機制採用墓碑式的“假後臺”。除了系統官方極少數程式可以真後臺,一般開發者開發出來的應用程式後臺受到以下限制:

1.使用者按Home之後,App轉入後臺進行執行,此時擁有180s後臺時間(iOS7)或者600s(iOS6)執行時間可以處理後臺操作

2.當180S或者600S時間過去之後,可以告知系統未完成任務,需要申請繼續完成,系統批准申請之後,可以繼續執行,但總時間不會超過10分鐘。

3.當10分鐘時間到之後,無論怎麼向系統申請繼續後臺,系統會強制掛起App,掛起所有後臺操作、執行緒,直到使用者再次點選App之後才會繼續執行。

當然iOS為了特殊應用也保留了一些可以實現“真後臺”的方法,摘取比較常用的:

1.VOIP

2.定位服務

3.後臺下載

4.在後臺一直播放無聲音樂(容易受到電話或者其他程式影響,所以暫未考慮)

5….更多

其中VOIP需要繫結一個Socket連結並申明給系統,系統將會在後臺接管這個連線,一旦遠端資料過來,你的App將會被喚醒10s(或者更少)的時間來處理資料,超過時間或者處理完畢,程式繼續休眠。

後臺現在是iOS7引入的新API,網上實現的程式碼比較少,博主也沒有細心去找。

由於博主要做的App需要在後臺一直執行,每隔一段時間給伺服器主動傳送訊息來保持帳號登陸狀態,因而必須確保App不被系統墓碑限制。

博主最先嚐試了很多方法,包括朋友發來的一個Demo,每180s後臺時間過期就銷燬自己然後再建立一個後臺任務,但是實際測試只有10分鐘時間。最後因為考慮到VOIP對服務端改動太大,時間又太緊,所以選擇了定位服務的方法來保持後臺。

要啟動定位服務:

1.需要引入標頭檔案:#import

2.在AppDelegate.m中定義CLLocationManager * locationManager;作為全域性變數方便控制

3.在程式啟動初期對定位服務進行初始化:

1

2locationManager = [[CLLocationManager alloc] init];

locationManager.delegate =self;//or whatever class you have for managing location

4.在程式轉入後臺的時候,啟動定位服務

[locationManager startUpdatingLocation];(第一次執行這個方法的時候,如果之前使用者沒有使用過App,則會彈出是否允許位置服務,關於使用者是否允許,後面程式碼中有判斷)

這樣在定位服務可用的時候,程式會不斷重新整理後臺時間,實際測試,發現後臺180s時間不斷被重新整理,達到長久後臺的目的。

但是這樣使用也有一些問題,在部分機器上面,定位服務即使開啟也可能不能重新整理後臺時間,需要完全結束程式再執行。穩定性不知道是因為程式碼原因還是系統某些機制原因。

相關推薦

iOS後臺執行模式background execution mode

參考網址:https://developer.apple.com/library/prerelease/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/Bac

golang 另類方法後臺執行程式linux、windows

後臺執行程式 方法1: windows 只需要在編譯的時候使用一下go build - ldflags="-H windows" Linux  在執行程式的尾部加入&,或者nohup ./example & 方法2: 匯入一個包即可。

Tomcat Connector三種執行模式BIO, NIO, APR的比較和優化

                  Java Blocking Connector   Java Nio Blocking Connector   APR/native Connector                              BIO                         NIO

【已解決】如何讓PHP返回AJAX後,繼續在後臺執行附完整程式碼

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

Dynamics 365中的事件框架與事件執行管道Event execution pipeline

本文介紹了Microsoft Dynamics 365(以下簡稱D365)中的兩個概念,事件框架(Event Framework)與事件執行管道(Event execution pipeline)。 本文適用於:Applies To: Dynamics 365 (online), Dynamics 365

MapReduce的本地執行模式debug除錯

(1)mapreduce程式是被提交給LocalJobRunner在本地以單程序的形式執行。在本地執行mapreduce程式可以更快地執行,並且可以使用debug進行跟蹤程式碼,方便查錯,在本地執行主要是看mapreduce的業務邏輯是不是正確,如果在本地執行錯誤的話,那麼在叢集上肯定也是錯

Hadoop系列005-Hadoop執行模式

本人微信公眾號,歡迎掃碼關注! Hadoop執行模式(下) 2.3、完全分散式部署Hadoop 1)分析: 1)準備3臺客戶機(關閉防火牆、靜態ip、主機名稱) 2)安裝jdk 3)配置環境變數 4)安裝hadoop 5)配置環境變數

Hadoop系列004-Hadoop執行模式

title: Hadoop系列004-Hadoop執行模式(上) date: 2018-11-20 14:27:00 updated: 2018-11-20 14:27:00 categories: Hadoop tags: [Hadoop,框架,執行模式] 本人微信公眾號,歡迎掃碼關注!

Tomcat8開啟APR執行模式centos6.5

Tomcat有三種運營模式:bio、nio、apr,不同模式下Tomcat的執行效率差別比較大。 一、bio(blockingIO) 阻塞式IO,Tomcat6及以前版本預設執行模式,效能非常低下,沒有經過任何優化處理。 二、nio(noblocking IO) 非阻塞

如何理解IIS 7的兩種應用程式池的管道模式Managed Pipeline Mode)

之前我寫過一篇部落格文章,講的是.NET 4.0的應用程式部署問題。有網友問到一個相關問題就是:如何理解IIS 7中的應用程式池的管道模式,尤其是如何理解“託管模型(integrated mode)”,今天特意再寫一篇文章來介紹這個問題。 IIS 7是微軟最新版本的IIS版

執行緒相關的單件模式Thread-Specific Singelton

  單件(Singelton)模式可以說是眾多設計模式當中,理解起來最容易,概念最為簡單的一個。並且在實際的設計當中也是使用得又最為頻繁的,甚至有很多其它的模式都要藉助單件才能更好地實現。然而就是這樣被強烈需求的“一句話模式”(一句話就能闡述明白),雖然有無數的牛人浸淫其中,至今也沒有誰鼓搗出一個完美的實

全面盤點當前Android後臺保活方案的真實執行效果截止2019年前

本文原作者“minminaya”,作者網站:minminaya.cn,為了提升文章品質,即時通訊網對內容作了幅修訂和改動,感謝原作者。 1、引言 對於IM應用和訊息推送服務的開發者來說,在Android機型上的後臺保活是個相當頭疼的問題。 老闆一句:“為什麼微信、QQ能收到訊息,而你寫的

hadoop初識之三:搭建hadoop環境配置HDFS,Yarn及mapreduce 執行在yarn上及三種執行模式本地模式,偽分散式和分散式介

--===============安裝jdk(解壓版)================== --root 使用者登入 --建立檔案層級目錄    /opt下分別 建 modules/softwares/datas/tools 資料夾 --檢視是否安裝jdk    rpm -

iOS執行NSThread篇

建立,啟動執行緒主執行緒相關用法獲取當前執行緒執行緒的名字其他建立執行緒方式:建立執行緒後自動啟動執行緒隱式建立並啟動執行緒優點:簡單快捷缺點:無法對執行緒進行更詳細的設定執行緒的狀態控制執行緒的方法啟

C++的單例模式執行緒安全單例模式懶漢/餓漢

單例模式 單例模式:是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個例項。即一個類只有一個物件例項。   實現簡單的單例模式:建構函式宣告為private或protect防止被外部函式

Spark執行模式-----Spark獨立模式

除了可以在Mesos或者YARN叢集管理器上執行Spark外,Spark還提供了獨立部署模式。你可以通過手動啟動一個master和workers,或者使用提供的指令碼來手動地啟動單獨的叢集模式。你也可以在一臺單獨的機器上啟動這些程序用來測試。 以獨立模式安裝Spark叢集

IOS 後臺執行介紹及解決辦法

第一部分 1.先說說iOS 應用程式5個狀態: 停止執行-應用程式已經終止,或者還未啟動。 不活動-應用程式處於前臺但不再接收事件(例如,使用者在app處於活動時鎖住了裝置)。 活動-app處於“使用中”的狀態。 後臺-app不再螢幕上顯示,但它仍然執行程式碼。 掛起-ap

php常見的四種執行模式SAPI

SAPI:Server Application Programming Interface 伺服器端應用程式設計埠。它就是PHP與其它應用互動的介面,PHP指令碼要執行有很多種方式,通過Web伺服器,或者直接在命令列下,也可以嵌入在其他程式中。 SAPI提供了一個和外部通

iOS執行NSThread

iOS 使用NSThread來代表執行緒,建立新執行緒也就是建立一個NSThread物件。 1 建立和啟動執行緒 在iOS10之前提供了兩種方法開啟執行緒。 - (instancetype)init

Mysql體系結構詳解——後臺執行待更新

本文只是一個初稿,還有很多不確定的地方。晚上在看看官方文件看看。 InnoDB儲存引擎是多執行緒的模型,因此其後臺有多個不同的後臺執行緒,負責處理不同的任務。 1.Master Thread Master Thread是一個非常核心的後臺執行緒,主要負責將