2011-11-15 194 views
11


我注意到在我開發的每個應用程序中發生的事情。這通常不是一個問題,但在這個特定的應用程序,如果我能「修復」它,如果它甚至是一個bug,那將是非常好的。防止從後臺返回後顯示初始屏幕

步驟重新產生問題:

  • 啓動應用程序,啓動畫面顯示約3秒鐘和應用程序啓動。
  • 按主頁按鈕,應用程序將轉到後臺。
  • 將應用程序從後臺移回(雙擊主屏幕並選擇它),顯示半秒鐘左右的飛濺,然後應用程序返回。

是否有可能擺脫從背景的方式彈出半秒的啓動畫面?它真的是這個特定的應用程序的問題。

+1

請確保在您的應用程序的plist中將'應用程序不在後臺運行'設置爲NO(原始鍵:['UIApplicationExitsOnSuspend'](http://developer.apple.com/library/ios/documentation/general /Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW23))。有些應用程序想要在用戶背景時「殺死」,所以他們使用這個鍵。然而,要恢復你的應用程序,你必須允許它在後臺運行(真的暫停,不必在後臺實際工作)。 – Sam

+0

它並沒有真正改變任何東西,仍然在從背景返回後出現瞬間飛濺... –

+0

你的代碼是通過兩次「應用程序:didFinshLaunchingWithOptions:」(用斷點或NSLog驗證)嗎?我不確定如何在每次啓動應用程序時使用啓動屏幕(default.png),而不使用'UIApplicationExistsOnSuspend'鍵(當您將它背景化時會殺死應用程序)。除非...應用程序無意中在'applicationDidEnterBackground:'或'applicationWillResignActive:'中像SIGABRT一樣在出口處被殺死。 – Sam

回答

10

好了,顯然這個問題是不是很聰明,開始:) 這個「問題」只能在模擬器發生。在設備本身上進行調試時,它按預期工作。

沒有傷害。感謝所有試圖幫助的人! :)

+1

+1不是一個壞問題,但。許多人也可能會遇到這種情況,直到他們發現這種情況,直到他們發現它是模擬器特有的。標記爲答案。 – Sam

+0

它不讓我,我會稍後:)謝謝山姆! :) –

+0

其實,剛纔我的5.1設備上有這個問題。有時顯示啓動畫面,有時不啓動,但didFinishLaunchingWithOptions不會再次觸發 – Setomidor

0

你的代碼顯示你的啓動畫面應該在你的appdelegate中didFinishLaunchingWithOptions方法。如果是的話,它只會在您的應用程序實際啓動時纔會出現,而不是從後臺返回。

使用這樣的事情(我知道它使用舊的動畫代碼,但我敢肯定,你可以將其更新到塊,如果你需要)...

splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20, 320, 460)]; 
    splashView.image = [UIImage imageNamed:@"Default.png"]; 

    [myWindow addSubview:splashView]; 
    [myWindow bringSubviewToFront:splashView]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(startupAnimationDone:finished:context:)]; 
    splashView.alpha = 0.0; 
    [UIView commitAnimations]; 

,然後創建一個名爲startupAnimationDone方法...

  • (無效)startupAnimationDone:(的NSString *)animationID完成:(的NSNumber *)完成上下文:(無效*)上下文{

    [splashView removeFromSuperview];

    [splashView release]; }

+1

我認爲@Shai Mishali指的是「Default.png」文件,當應用程序來到前臺時顯示。不幸的是,當你的應用再次變得活躍時,不可能改變這種行爲以及圖像是否被顯示,這取決於許多因素,但是我可以告訴它主要是當時你有什麼內存。 – Rog

+1

我試着做這樣的事情,但問題是如果你沒有指定一個啓動畫面,你將有一個黑色的屏幕顯示,直到應用程序準備就緒,然後纔會顯示飛濺。我可以以某種方式「取消」默認的飛濺,所以在啓動時不會出現黑屏嗎? –

+0

你可以做的就是在應用程序轉到applicationWillResignActive的背景之前抓取屏幕的副本,將default.png重命名爲其他內容,並將抓取的圖像重命名爲default.png - 我會想象這是閱讀應用程序像Kobo在他們即將進入背景時所做的那樣。我自己沒有這樣做,所以這只是一個假設。通常我會想象,在applicationDidBecomeActive中立即獲取自己的圖像,無論它是什麼,都將是相當即時的,因此用戶不必看到黑屏。 – amergin

9

根據我的經驗,這是由iOS處理的東西(我帶着經驗走,因爲我沒有看到任何有關這方面的文檔)。如果操作系統可以快速恢復應用程序狀態,則會在狀態恢復時顯示其先前狀態的屏幕截圖。但是,如果某些事情會延遲進程,例如應用程序未正確處於後臺(例如在快速任務切換期間),或者如果其他可預測的操作會延遲啓動,則會返回到啓動畫面(而不是屏幕截圖),以減輕用戶體驗。

簡短的回答:這是你的手中。

+1

您正在回答已回答的問題。正如我所說的問題出現在模擬器中,並且在您的設備上發生時不會發生。 –

+4

我添加了答案,因爲我已經看到這發生在我設備上的自己的項目中,並且必須回答客戶關於該問題的問題,所以我覺得對於未來的旅行者來說,更全面的話語是有價值的。 – QueyJoh

+0

好吧,對於downvote感到抱歉。我通常不認爲它的良好實踐可以回答已經結束的問題,特別是當答案沒有任何意義時(「它超出你的手」)。我欣賞儘管。 –

12

我知道這個問題被標記爲「已回答」 - 但現實情況是,我的答案並不正確,我想分享。

我最初得出的結論是,上面最準確的答案是來自QueyJoh--「這是由iOS處理的......簡短的回答:它已經沒用了。」

但是在試驗之後,我設法將問題定位爲控制狀態欄的info.plist文件中的條目。具體來說,我有「UIStatusBarHidden」和「UIStatusBarStyle」的條目。

從我的plist文件中刪除這些條目立即停止我的應用程序從離開我的應用程序切換回來時顯示啓動屏幕。

問題解決。

馬修

+0

謝謝。這讓我瘋狂。 – pfs

+0

在我的情況下,當我使用'LaunchScreen.xib'時,這並沒有幫助我,當使用'LaunchImage'時,這不是必需的。 –

0

我有這樣的問題太多,現在我已經解決後援的原因是你沒有在applicationDidEnterBackground太多的東西,儘量減少。