Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单个长寿命ios后台任务(voip)_Ios_Objective C - Fatal编程技术网

单个长寿命ios后台任务(voip)

单个长寿命ios后台任务(voip),ios,objective-c,Ios,Objective C,我正在开发一个应用程序,需要定期(经常)在后台做一些工作,即使应用程序本身没有显示。我已经启动了它,甚至宣布它是一个VOIP应用程序,在10分钟(600秒)后自动重启。该应用不适用于应用商店 大约300-400秒后,系统会生成一个新线程(正确),但不会关闭最后一个线程。这意味着大约每600秒就会产生一个新线程,增加我的应用程序的内存和电池消耗。不太好 那么,有没有关于如何在创建新线程后关闭第一个派生线程的线索? 此代码在应用程序关闭后启动后台处理程序。它还以600秒的间隔周期性地启动一个新的处理

我正在开发一个应用程序,需要定期(经常)在后台做一些工作,即使应用程序本身没有显示。我已经启动了它,甚至宣布它是一个VOIP应用程序,在10分钟(600秒)后自动重启。该应用不适用于应用商店

大约300-400秒后,系统会生成一个新线程(正确),但不会关闭最后一个线程。这意味着大约每600秒就会产生一个新线程,增加我的应用程序的内存和电池消耗。不太好

那么,有没有关于如何在创建新线程后关闭第一个派生线程的线索?

此代码在应用程序关闭后启动后台处理程序。它还以600秒的间隔周期性地启动一个新的处理程序

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    isInBackground = YES;
    BOOL backgroundAccepted = [[UIApplication sharedApplication]
        setKeepAliveTimeout:600 handler:^{ [self startBackgroundHandler]; }];
    if (backgroundAccepted)
    {
        NSLog(@"VOIP backgrounding accepted");
    }
    [self startBackgroundHandler];
}
此代码启动一个线程,该线程定期执行某些工作(每5s):


我们已经为此奋斗了一段时间,但在这里写下Stackoverflow之后,我们找到了一个解决方案

刚刚更换

while (1)


其中线程id为int。因此,当新线程启动时,线程id将增加,旧线程id将停止。

我花了几天的时间努力实现在10分钟(600秒)后自动重新启动后台任务的功能。但什么都不管用。在看到你的问题后,我认为它对我有用,但它对我不起作用。10分钟后,当后台任务重新启动时,会使应用程序在后台死机。但我如何才能做到这一点。我已经发布了相关问题,但没有找到任何解决方案。问题:我已经很久没有写过这个了,所以我只能回答这些问题了。你应该提出你自己的问题。
while (1)
int localThreadId = ++threadId;
while (threadId == localThreadId)