簡體   English   中英

在iPhone中創建遞歸后台處理程序是否合法?(當應用進入后台時進行處理)

[英]Is it legal to create a recursive background handler in iphone?(processing when app enters the background)

如果我為后台應用程序注冊了一個應用程序,但確實輸入了背景,並用大約10分鍾的時間使后台處理程序完成任務,則時間結束后,該處理程序將調用Finishing塊,並在此塊中再次創建后台處理程序,您將再次獲得10分鍾等,這樣應用程序將保留在后台。 我的意思是這樣做....? 還是蘋果會反對?

文檔中

運行后台任務的應用程序在有限的時間內運行它們。 (您可以使用backgroundTimeRemaining屬性找出有多少時間可用。) 如果您沒有在時間到期之前為每個任務調用endBackgroundTask :,系統將終止該應用程序。

因此,不,您不能無限期在后台運行。

是的,沒錯,您不能以這種方式無限運行。 但是我發現了另一個技巧,當應用程序進入后台時,開始播放0音量的音頻:-)您的應用程序將永遠不會被殺死。

有一個VoIP應用程序Media5,可以使用UDP套接字在后台接收來電。

開發人員表示,他們使用“技巧”使該應用程序永久保持活動狀態,而我將排除無聲音頻播放選項。 所以問題是:那是什么把戲?

Bria也可以在后台使用UDP接收。

摘自第515期的評論20 :具有多任務支持的iPhone的后台應用程序支持

我非常確定,如果不連續播放音頻文件或記錄GPS位置,則無法在iOS 4.3+(主線程或輔助線程)中保持活動的UDP偵聽套接字。 如果您每隔5秒鍾在nsrunloop中使用AVAudioPlayer(在初始化AudioSession之前)播放音頻播放,則主線程將保持活動狀態,並且無需在info.plist中聲明音頻背景支持。

我認為這是Media5和Bria使用的“技巧”。 我還嘗試向回送接口創建一個無限的TCP流,將其聲明為VoIP,以查看UDP套接字是否也保持活動狀態。 答案是否定的,只有TCP套接字在后台(且屏幕鎖定)時才起作用,同時UDP已關閉並且無法再監聽傳入的呼叫。

因此,關鍵點在於必須使主線程保持活動狀態...僅使用簡單的nstimer o無限運行循環是沒有用的,因為看門狗會在后台運行幾秒鍾后殺死該進程(除非您在連接了GDB接口的調試模式下工作) ,它將永遠運行)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM