关闭背景中的应用程序

关闭背景中的应用程序

问题描述:

假设我有一个实际在后台运行的iOS应用程序(出于几种法律原因之一,如背景音频,请求的时间等)。什么事情可能会导致操作系统关闭(杀死)这个应用程序,而不仅仅是运行或暂停它?我怎样才能避免它们?我如何使用公共API可靠地触发它们(在此应用程序中)?关闭背景中的应用程序

+3

换句话说,您的问题是:我如何将我的应用程序指定为超级重要的,以便操作系统不会对它施加影响?在大多数情况下,答案是“你不能”。操作系统设计人员通过回答:“如果所有的应用程序都这样做呢?”例如:http://blogs.msdn.com/b/oldnewthing/archive/2005/06/07/426294.aspx – 2011-03-27 17:03:10

+0

如果多个后台应用保留较少的脏内存等(问题的主题),更多他们可以留在后台运行。这个数字仍然是有限的,但更大,这可能会更好。 – hotpaw2 2011-03-27 17:06:33

+1

不幸的是,假设第三方开发者的诚意和合理的能力不是一个好的最终用户操作系统是如何制造的。如果设计应用程序的越野车或内存饥饿告诉操作系统不要触摸它,该怎么办? – 2011-03-27 17:10:51

我不知道你在问什么 - 这听起来像你希望能够终止其他应用,这(谢天谢地)根本不可能在iOS平台上,由于沙盒等

但是,当您的应用程序在后台运行时,最有可能的原因是它使用大量的内存等,并且不会响应didReceiveMemoryWarning调用,通过删除不再需要的资源。

就自动触发这些而言,最简单的方法是使用模拟器上“硬件”菜单中的“模拟记忆警告”选项。

如果它使用了太多的内存,如果它不叫endBackgroundTask:当到期处理程序(调用beginBackgroundTaskWithExpirationHandler:时指定)被调用时,如果用户明确地杀死它,如果应用程序抛出一个异常,你的应用程序可能被杀死,电话exit,触发EXC_BAD_ACCESS或其他信号,依此类推。也可能有其他原因。为了避免这些,请不要使用太多的内存,在需要时调用endBackgroundTask:,制作一个用户不想杀的应用程序,不要抛出异常,调用exit,访问无效的内存位置等等上。

没有办法可靠地触发“用户明确杀死应用程序”。对于其他用户,您可以分配大量内存,拒绝拨打endBackgroundTask:,使用[NSException raise:... format:...],拨打exit,或者创建随机垃圾指针并遵循它们。虽然你可能实际上不应该做任何这些。

+0

调用exit()或取消引用不良指针似乎不是公共API。但是试图分配大量内存或者不调用endBackgroundTask似乎是公共API的“合法”使用。 – hotpaw2 2011-03-27 17:27:41