* 參考:
下面就是當你使用定位來保持程式後台始終執行的相應**:
1.因為ios 9 的特殊性,所以我們先定義乙個判斷方法以及宣告相應的屬性
2.下面我就貼出具體的**了,這些**是參考別人的,我會在下面解釋**的具體含義,同時給出優化方案,優化後的**並沒有單獨寫成demo,所以就不具體的說明了,但是我會把這裡的**給出說明:
好了,這些就是全部的**,當然如果你什麼都不改變,只把你的判斷加進去,只求達到目的的整體移植過去也是可以達到目的的,但是個人覺得總重要的還是能夠知道每一句**是幹什麼的,這樣如果後續需求改變或者需要新增改變什麼功能,也就能很快找到入口了。不多說了。接下來就來分析一下這部分**的具體含義吧。
總的來說,**是通過3個(個人感覺)死迴圈來實現的程式喚醒啟用,從而保證應用程式不被後台殺死。
[self monitorbatterystateinbackground]方法,在這個方法中改變狀態,同時呼叫-
程式這個時候已經在前台執行完畢,而此時其[self startbackgroundtask]依然在執行著。。。我們可以發現此時並沒有什麼用。
在這裡面改變狀態值,呼叫[self startbackgroundtask]方法,此時才可以說進入後台任務,在後台任務中,我們發現那些什麼標誌位啊,神馬的貌似都沒有什麼用,真正有用的也就是 位置更新 乙個計數器的迴圈工作,以及下面的那個後台時間逐次遞減等等。。。。然後切記關注最後依然有一次狀態值的改變,在這裡的改變是來控制上面的**方法是否可以進入的判斷條件。
總的來說,他就是依賴於bool值改變,進入**迴圈--計數器迴圈定位---後台剩餘時間迴圈,來使程式始終執行,不被殺死的。
從上面的分析我們可以看到,對於僅僅達到始終執行的目的來說,很多冗餘**(僅僅對於我們沒用,原創肯定有別的用法),而且在一些迴圈改變bool值得過程中,我們可以看到,其實他呼叫[self monitorbatterystateinbackground]方法,可以說是多餘的,我們完全可以刪除這個方法,在需要的時候單獨的改變或者開啟後台任務,其它的一些不做具體的修改說明。 起初當我需要達到這個目的時,我也是完全套用了原創的做法,然後在逐漸的修改,減少無用**,最後需求改變。。。要獲取物流狀態以及實時定位功能,這個正好讓我可以達到目的,我就在最初的時候直接開啟了定位。。。。當然耗電是肯定的。。記憶體感覺還可以。。
以上僅僅是我個人的看法以及對**的理解,可能有很多不到位和錯誤的地方,希望各位大神給予意見以及修改的方向,讓我能夠深入的學習研究,多謝!!!!
iOS 保持APP在後台長時間執行
1 background audio2 picture in picture3 voip 後台語音服務,類似skype通話應用需要呼叫,可進行後台的語音通話。4 location services 這是後台的定位,系統會擁有統一頁面進行管理。5 newsstand downloads6 extern...
1 12 長時間執行乙個任務
1.12.長時間執行乙個任務 問題 我要長時間執行乙個任務 解決辦法 使用 timer 類,或者監聽 sprite 的 enterframe 事件 討論 timer 類是actionscript 3.0新增的,來代替早期的 setinterval 和 settimeout 函式。當建立timer類的...
長時間獨佔表
應用程式運算元據庫表時,需要長時間 可能要幾分鐘,甚至十來分鐘 修改資料表的資料,而在整個過程中,不容許別的使用者運算元據 即只能單使用者運算元據 這種情況,相當於要把表鎖住 跟資料庫概念的鎖不一樣 等執行完後,解鎖,別的使用者才可以運算元據。就這種問題,有以下幾種種解決方案。1.設定標記字段 fl...