Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.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 UIC应用程序。后台执行一段固定的时间_Ios_Uiapplication - Fatal编程技术网

Ios UIC应用程序。后台执行一段固定的时间

Ios UIC应用程序。后台执行一段固定的时间,ios,uiapplication,Ios,Uiapplication,因此,我希望我的应用程序只在固定时间内执行后台执行,以防用户不手动停止应用程序,因此理论上应用程序可以永远在后台运行(这可能吗?) 我正在使用下面的代码(只是一个测试应用程序)测试一个后台任务在结束前可以运行多长时间。我在某个地方读到,10分钟是我们可以在后台执行的最长时间,没有办法超越这一点(?)。但是,我的代码只能在后台执行3分钟 总结一下我的问题: 是否可以告诉应用程序在后台执行x>10分钟 2.我还有其他类似的选择吗?(我需要在其中实现的实际应用程序在后台接收位置更新,用户可以将手机置于

因此,我希望我的应用程序只在固定时间内执行后台执行,以防用户不手动停止应用程序,因此理论上应用程序可以永远在后台运行(这可能吗?)

我正在使用下面的代码(只是一个测试应用程序)测试一个后台任务在结束前可以运行多长时间。我在某个地方读到,10分钟是我们可以在后台执行的最长时间,没有办法超越这一点(?)。但是,我的代码只能在后台执行3分钟

总结一下我的问题:

  • 是否可以告诉应用程序在后台执行x>10分钟
  • 2.我还有其他类似的选择吗?(我需要在其中实现的实际应用程序在后台接收位置更新,用户可以将手机置于后台长达30分钟,突然不接收更新将是不好的)

    我在某个地方读到,10分钟是我们可以在后台执行的最长时间,没有办法超越这一点(?)。但是,我的代码只能在后台执行3分钟

    是的,在iOS 7允许应用程序在后台最多执行10分钟之前,您是对的,但是自从iOS 7之后,他们将这一时间减少到了180秒

    但如果您想在后台获得位置更新,则可以在
    info.Plist
    文件中添加
    Required background modes
    属性。使用此模式,您将能够在后台运行应用程序以获取位置更新。苹果将在审查应用程序以提交应用程序商店时审查您的请求。因此,请确保仅当您出于实际目的使用此模式时,才使用此模式

    以下是apple允许后台执行的各种模式,您可以查看一下

    编辑

    如果您希望在用户进入后台后的特定时间后停止获取位置更新,您可以这样做

    - (void)applicationDidEnterBackground:(UIApplication *)application {
        [self performSelector:@selector(stopGettingLocationUPdates) withObject:nil   afterDelay:1800];
    }
    
    -(void)stopGettingLocationUPdates{
        [self.locationManager stopUpdatingLocation]
    }
    

    这将在30分钟后停止更新。

    您的代码没有在后台运行。它不是测试你想要测试的东西

    苹果说:

    在后台应用程序中执行有限长度任务 转换到后台可能需要额外的时间来完成 完成任何重要的最后一分钟任务。索取背景资料 执行时间,调用 beginBackgroundTaskWithName:expirationHandler:的方法 UIC应用程序类

    您得到的实际时间没有指定,可能是根据功耗、内存需求等临时决定的。它们可能是最大值

    他们接着说:

    为需要更多资源的任务实施长时间运行的后台任务 要执行,您必须请求特定的权限才能执行 在后台运行它们,而不挂起它们。仅在iOS中 允许在后台运行特定的应用程序类型:

    • 在后台向用户播放音频内容的应用程序,如音乐播放器应用程序
    • 在后台录制音频内容的应用程序
    • 随时通知用户其位置的应用程序,如导航应用程序
    • 支持互联网语音协议(VoIP)的应用程序
    • 需要定期下载和处理新内容的应用程序
    • 从外部附件接收定期更新的应用程序 实现这些服务的应用程序必须声明它们支持的服务,并使用系统框架实现这些服务的相关方面 这些服务。声明服务可以让系统知道 您使用的服务,但在某些情况下是系统框架 实际上防止您的应用程序被挂起

    嗨,普密特,谢谢你的回复。我已经把这个东西添加到info.Plist文件中了,正如你提到的,我的应用程序在后台工作正常,一切都很好。。我担心的是,我希望应用程序能够接收最长30分钟的更新,或者直到用户结束它。3分钟是不够的。解决方案可能是阻止应用程序进入后台吗?(如果可能的话)使用StopUpdateLocation方法完成更新后,您可以通过编程停止接收位置更新阻止应用程序进入后台,但如果您使用的是后台模式之一,只要您愿意,您就可以接收位置更新。如果您使用此后台模式,您将不会被限制在180秒之内。你可以在完成后立即停止。在某些情况下,如果有太多的应用程序正在运行,iOS可能会中止你的应用程序以释放一些内存,否则你的应用程序会一直运行,直到用户手动关闭。好的,我测试了它,正如你所说,我可以在后台接收位置更新。但是如果用户从不取消更新呢?该应用程序可能会不断耗尽电池电量,用户不知道为什么。。。
    - (void)applicationDidEnterBackground:(UIApplication *)application {
        [self performSelector:@selector(stopGettingLocationUPdates) withObject:nil   afterDelay:1800];
    }
    
    -(void)stopGettingLocationUPdates{
        [self.locationManager stopUpdatingLocation]
    }