2010-11-21 100 views
4

有何想法?如何以編程方式重新啓動iOS中的iPhone應用程序

,我覺得這種方式http://writeitstudios.com/david/?p=54

但可能是一些簡單的

+7

不這樣做。爲了上帝的愛。 – 2010-11-21 18:08:10

+0

那麼你有報價的例子是可可應用程序不適用於可可觸摸(iOS)應用程序。其次,它不可能在iOS上重新啓動你的應用程序。 – itsaboutcode 2010-11-21 21:09:22

+2

當然,真正的問題是:你爲什麼想要? – 2010-11-21 22:22:50

回答

20

我知道這樣做的唯一方法是不理想的,但它的工作原理。

首先,您的應用程序必須退出後臺執行(多任務處理)退出時應用程序必須退出,而不是作爲後臺任務運行。這是通過plist鍵UIApplicationExitsOnSuspend完成的。

其次,您的應用需要註冊一個可用於啓動應用的自定義URL方案。

第三,您需要一個託管在某個地方的網頁,這個網頁在加載時會重定向到您應用的自定義URL方案。

第四,用戶需要一個活動的Internet連接。

要退出並重新啓動,請在託管重定向網頁上調用UIApplication openURL。您的應用將退出,Safari將啓動並加載您的頁面。該頁面將Safari重定向到您的自定義URL方案,提示Safari在內部調用openURL,導致iOS啓動您的應用程序。

+2

如果你感覺不正常,你可以從你的應用程序本身託管頁面(你可以在'-applicationWillTerminate:'中退出約10秒鐘;在另一個線程中服務它可能更容易,但是你也可以調用socket (),bind(),listen(),accept(),write()和close())。讓您的應用在您提供該頁面後終止,並讓頁面延遲啓動您的應用(我認爲是「刷新」或「重新加載」標題)。 – 2010-11-21 22:27:20

+0

你甚至不需要設置UIApplicationExitsOnSuspend;你只需要調用exit()。在-beginBackgroundTaskWithExpirationHandler中包裝「服務器」:確保您的應用獲得足夠的CPU時間來提供服務,然後您可以睡500毫秒(以「確保」發送數據)和退出()。複雜的一點是解析請求,但你可以通過睡眠500毫秒並讀入一個大的(8K)緩衝區,或者(如果你感覺冒險)選擇+讀取500毫秒。 – 2011-09-08 14:55:16

+0

有趣......但可怕的解決方案! – KiNG 2014-06-09 09:52:19

0

除非你對越獄的設備開發,蘋果公司甚至不會讓你以編程方式終止您的應用程序。因此重新啓動設備是不可能的。

+2

我認爲Alexei是指重新啓動應用程序,而不是設備。當然,重新啓動後者遠遠不是問題。 – 2010-11-21 17:35:06

+0

當然你可以調用exit()或kill(),或者直接從main()或其他各種東西(比如abort())返回。這與崩潰無法區分,並且可能會因此導致Apple拒絕您的應用。 – 2010-11-21 18:05:11

+0

什麼意思是從main()返回?我解決問題添加退出()按鈕應用程序。我需要它,因爲第一次和第二次測量總是不同的。 – 2010-11-22 06:46:41

1

我的帖子,你鏈接到指的是可可應用程序,而不是iOS。在iOS上,您可以使用exit(0);退出應用程序(但Apple不喜歡這樣),但我不建議這樣做。雖然你不能重新啓動iPhone應用程序。

-1

AppDelegate實例有一個方法

(void)applicationDidBecomeActive:(UIApplication *)application 
{ 
} 

在這裏,你可以把邏輯弄清楚,如果應用程序應重新啓動,或繼續做什麼它在做什麼。例如,您可以開始使用BOOL變量appMustRestart,即false,但在您的應用程序中發生某些事情時,您希望下一次成爲新的重新啓動時觸發爲true。

if (appMustRestart) 
{ 
    [self resetVars]; // call a method that resets all your vars to initial settings 

    // INSERT CODE HERE TO TRANSFER FOCUS TO INITIAL VIEWCONTROLLER 
} 
相關問題