iOS多任务:suspend VS terminate

iOS4.0开始支持multitasking,这是一件令人振奋的消息。但对程序员们来说,却未必如此。

苹果至今不在SDK中提供退出应用程序的API。要退出程序,必须通过Home键。但从iOS4.0开始,按Home键iOS用suspend(挂起)代替了terminate(退出)。

这个情况可以通过Info.plist设置改变,如果你将 UIApplicationExitsOnSuspend或者Applicationdos not run in background设置为true(注意不是YES),那么当按下Home键后,程序就会退出而不是挂起。

例如,在程序OpenUrl中,我们在程序一启动,就调用Safari打开一个Url,然后OpenUrl会退出。

我们首先把Application dos not run in background设置为true,然后分别在程序挂起和退出时打印一些东西:

//程序挂起时调用

- (void)applicationDidEnterBackground:(UIApplication *)application {

NSLog(@"App will enterbackground.");

}

//程序退出时调用

- (void)applicationWillTerminate:(UIApplication *)application {

NSLog(@"App willTerminate.");

}

然后运行程序,控制台输出如下:

2011-08-23 15:46:42.499 OpenUrl[2492:207] App willenter background.

2011-08-2315:46:42.501 OpenUrl[2492:207] App will Terminate.

这说明当Safari打开时,程序退到后台运行,然后iOS把程序关闭了。

如果你将Application dos not run in background设置为false,则控制台只会输出一行:

2011-08-2315:48:54.183 OpenUrl[2506:207] App will enter background.

这说明Safari打开后,OpenUrl程序进入后台,但并没有退出(挂起)。

当然,如果你连续按下两次Home键,仍然看到的是两个程序:

http://img.ph.126.net/DUmKt70DXB6Q4ncgKVIBVQ==/1133781206207424110.png

这不值得大惊小怪,因为按两次Home键后,苹果只是简单第提供了一个历史任务列表,而不是人们以为的当前任务列表——这在苹果网站上已经说得很清楚了。至于为什么苹果没有能力为用户提供一个“任务管理器”,我们不得而知。不过有人认为,在多任务中使用挂起代替退出,将减少程序再次启动的时间,节省电量的消耗。

 

注:原文地址http://blog.csdn.net/kmyhy/article/details/6719209

posted @ 2012-08-15 18:22  Mr.Songz  阅读(194)  评论(0编辑  收藏  举报