2012-02-10 11 views
1

我有一個奇怪的情況,客戶簡化版,希望自己的應用程序支持多任務,所以我在info.plist喜歡創造了一個標誌,應用程序不會在後臺運行,但是在我的應用程序終止之前,我仍然可以執行一些任務嗎?

Application does not run in background = YES; 

但也有在應用程序生命週期倍,應用程序必須上傳一些數據到服務器在它結束之前。如果沒有,那麼服務器將有模糊的數據,我的客戶的公司(也可能是我......)將註定!

現在我的問題是,

  • 多少時間,我之前的操作系統將終止我的應用程序?有時數據可能很大,如果上網速度很慢,那麼我可能需要更多時間。
  • 我看到這個方法beginBackgroundTaskWithExpirationHandler將這個工作在我的情況。如果我確實支持後臺執行,我懷疑這可能會起作用。我對嗎?

最後的問題,

  • 我能想到的任何其他的選擇嗎?
  • 我應該辭去iOS開發人員嗎?

感謝

+0

我想你可以嘗試UIApplicationExitsOnSuspend = YES和beginBackgroundTaskWithExpirationHandler在一起。這是一個快速測試,如果它能起作用,你就可以得到你想要的東西。 – anticyclope 2012-02-10 02:36:58

回答

2

我的建議是嘗試這樣的:

[[NSNotificationCenter defaultCenter] 
addObserver:self 
selector:@selector(saveWhatever) 
name:UIApplicationWillTerminateNotification 
object:nil]; 

只是把這些代碼在你的類的init方法。一定要刪除自己作爲一個觀察者viewDidUnload這樣的:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

在這裏,您可以保存任何你需要保存的,但我不知道如何上傳數據。您最好的選擇是將數據保存到文件中,然後在下次打開應用程序時,將文件中的數據異步上傳到服務器。您可以嘗試使用此通知上傳它,但我不確定Springboard是否會等待發生這種情況。

+1

@dontCheckMyBlog - 你擁有的時間不確定,但不長。嘗試在應用試圖終止時嘗試下載下載是心痛的祕訣。 Rickay是對的:設置某種標誌並在下一次啓動時進行下載。 (並且不要辭職,只要不斷學習,那裏的iOS開發人員就會大量短缺,推回要求。) – Rayfleck 2012-02-10 02:31:19

+1

良好的通話,以及不辭職的好建議。 iOS開發可能看起來像一個瘋狂的世界,但Apple API是最容易實現的,並且是我見過的最好的文檔。另外,如果您有太多不太複雜的數據,那麼實施單身管理可以更快速地管理數據。否則,我會研究核心數據,儘管它不是入門級技術,正如Apple在文檔中所指出的那樣。祝你好運! – 2012-02-10 02:35:31

+0

@Rayfleck,大聲笑謝謝,你們倆都很好的建議。 – doNotCheckMyBlog 2012-02-10 02:36:07

2

辭職?可能不會,但是在另一傢俱有現實期望的公司中尋找工作?肯定。根據我的經驗,堅持設計理念和不聽原因的客戶更容易責怪開發商,因爲這些都是梨形。

至於試圖在終止時上傳數據。不要這樣做。在計時器假定掛起並殺死它之前,您的應用程序將獲得多少時間,看門狗定時器不可預測。最近,當我開始製作一個應用程序隨機失敗的已建立項目時,我遇到了類似的情況。問題在於開發人員已將下載代碼放入應用程序中:didFinishLaunchingWithOptions:方法。由於互聯網延遲和服務器延遲問題,該方法耗時過長,應該將代碼移至後臺線程。

試圖做終止,睡眠等相同的事情會有同樣的問題,並沒有已知的方式來阻止看門狗定時器殺死你的應用程序。

我的另一個問題是客戶端爲什麼會抵制多任務處理?他們爲什麼關心?無論如何,它們實際上無法阻止它,因爲它實際上是任何應用程序的一部分。我認爲,如果他們不想多任務處理,他們也不希望任何形式的互聯網訪問或動畫。因爲如果不對這些內容進行線程化,您的用戶界面很可能無法使用,從而爲您帶來很多1星評級和投訴。

+0

我完全理解,我猜想目前的一代計算必須面對這些有趣的設計選擇。對於人們來說,很難抵制從桌面通勤到平板電腦和智能手機計算的巨大變化。他們只是沒有得到這些東西!他們喜歡用一種非常複雜的方式來思考問題!哈哈(Desktopy)。 – doNotCheckMyBlog 2012-02-10 02:58:56

+1

你知道涉及的人 - 但有時這些事情不是客戶很愚蠢,而是客戶表示他們已經誤解了某件事的含義(多任務處理),所以這可以通過仔細詢問客戶來看清楚如果他們真的知道他們在說什麼:-) – drekka 2012-02-10 03:02:13

1

將數據上傳到服務器時重要嗎?在應用程序終止之前它是否必須正確?

如果沒有,那麼我有這樣的建議:

在App委託方法applicationWillTerminate,編寫所有的數據到一個文本文件,像mydata.txt,您的應用程序沙箱的文件系統(即在庫/緩存目錄:不能使用Document目錄生成應用程序生成的文件Apple現在使用Document目錄進行iCloud同步,因此將文件放在那裏會導致應用程序被拒絕)。還需要將您的文件標記爲不同步到iCloud屬性。

然後在下次啓動應用程序時,可以檢查是否存在此「mydata.txt」文件。如果存在,請從中讀取所有數據並上傳到您的服務器。然後從Library/Cache文件夾中刪除文件,以便下次不上傳相同的數據。您可以在App Delegate的applicationDidFinishLaunching方法中執行此操作。

相關問題