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