假设我有一个实际在后台运行的iOS应用程序(出于多种法律原因之一,例如背景音频,请求的时间等)。什么东西可能导致操作系统关闭(杀死)这个应用程序,而不是只是运行或暂停它?我该如何避免它们?如何使用公共API可靠地触发它们(在此应用程序中)?
答案 0 :(得分:3)
如果您的应用使用了太多内存,如果在调用过期处理程序(调用endBackgroundTask:
时指定)时调用beginBackgroundTaskWithExpirationHandler:
,如果用户明确杀死它,则可能会被杀死,如果应用程序抛出异常,调用exit
,触发EXC_BAD_ACCESS或其他信号,依此类推。也可能有其他原因。
要避免这些,请不要使用太多内存,在需要时调用endBackgroundTask:
,创建一个用户不想杀死的应用,不要抛出异常,调用exit
,访问无效的内存位置,等等。
没有办法可靠地触发“用户明确杀死应用”。对于其他人,您可以分配大量内存,拒绝调用endBackgroundTask:
,使用[NSException raise:... format:...]
,调用exit
或创建随机垃圾指针并遵循它们。不过,你可能不应该真的做任何这些。
答案 1 :(得分:0)
我不确定你在问什么 - 听起来你希望能够终止其他应用程序,幸运的是,由于沙盒,这在iOS平台上是不可能的等等。
然而,你自己的应用程序在后台运行时被杀死的最可能原因是它是否使用了大量内存等,并且没有通过释放资源来响应didReceiveMemoryWarning
调用不再需要。
在自动触发这些方面,最简单的方法是在模拟器的“硬件”菜单中使用“模拟内存警告”选项。