2010-11-21 93 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 
} 
相关问题