`

ios 程序后台执行

    博客分类:
  • ios
 
阅读更多

如果你的应用需要在点击home键之后,整个程序里还需要有部分功能需要一直执行,那么就需要用到GCD,后台执行的话,一般来讲,苹果做了限制,如果不做任何配置的话,你的应用最多只能运行5s,5s之后就会被挂起,长时间的话就会被杀掉进程;还有一种情况:你设置了后台运行,但是一般来讲:9.9Min之后,程序同样也会被挂起;

问题来了:怎么进行设置,如果设置成一个一直在后台执行的,不受时间段的控制;

很多的应用:qq,高德地图导航,都是需要保持一个长连接;

下面说一下实现思路:

首先

继续保持Application does not run in background字段的值为NO,同时在UIBackgroundModes字段中添加audio,location,voip,或者选择App processes Newsstand Kit downloads,App communicates with an accessory,App communicates using CoreBluetooth,App shares data using CoreBluetooth,总共7个,都可以开始后台执行,大概在594秒(即9.9分钟)的时候停止,与加不加相应的调用代码无关,空工程即可。

 

 

 

- (void)applicationDidEnterBackground:(UIApplication *)application{

    UIApplication*   app = [UIApplication sharedApplication];
    __block    UIBackgroundTaskIdentifier bgTask;
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        dispatch_async(dispatch_get_main_queue(), ^{
            if (bgTask != UIBackgroundTaskInvalid)
            {
                bgTask = UIBackgroundTaskInvalid;
            }
        });
    }];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        dispatch_async(dispatch_get_main_queue(), ^{
            if (bgTask != UIBackgroundTaskInvalid)
            {
                bgTask = UIBackgroundTaskInvalid;
            }
        });
    });
}

 

然后,在定义一个定时器,定时的执行进行检测,后台线程运行的时间剩余数;如果小于1分钟就再次申请一个新的任务;

- (void)tik{
    if ([[UIApplication sharedApplication] backgroundTimeRemaining] < 61.0) {
       [[CKAudioTool sharedInstance] playSound];
        [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
    }
}
 [[CKAudioTool sharedInstance] playSound];//这段代码是去播放了一个无声的音乐,很关键的一点是
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error]

 

这样后台播放就不会影响到别的程序播放音乐了。

我这个计时器每分钟运行一次tik函数,如果发现后台运行时间小于一分钟了,就再去申请一个backgroundTask。

神奇的地方在于:backgroundTask不能在程序已经进入后台的时候申请,可以用一个播放音乐的假前台状态去申请,所以可以做到不断申请到权限,也就完成了长时间后台执行。

 

 

 

 

 

分享到:
评论

相关推荐

    ios 程序在后台运行的demo

    总之,"ios 程序在后台运行的demo"可能展示了如何利用iOS提供的各种机制,使得应用能在后台保持运行或者在后台执行特定任务。理解和掌握这些技巧对于开发高效、用户体验良好的iOS应用至关重要。

    iOS如何保持程序在后台长时间运行

    在iOS平台上,应用程序在后台运行的能力受到严格的限制,这是为了优化电池寿命和系统性能。iOS采用了墓碑式后台管理模式,大部分应用在用户按下Home键后只能在后台运行有限的时间。通常,应用程序在转入后台后有180...

    关于iOS App后台运行的调研报告.pdf

    iOS系统的后台运行机制是为了提高用户体验而设计的一套规则体系,它允许部分应用程序在不被用户直接操作的情况下继续执行特定任务。根据Apple官方文档,允许后台长时间运行的应用类型包括但不限于以下几种: 1. **...

    解决ios下后台运行与锁屏时倒计时停止问题

    苹果允许开发者在特定情况下在后台执行任务,比如声音播放、位置更新等。如果倒计时功能对于应用至关重要,开发者可以尝试启用“后台应用刷新”模式,但这并不保证JS始终能运行,因为系统仍然可能根据资源需求暂停...

    IOS 稳定无限后台运行

    然而,“IOS 稳定无限后台运行”是一种技术策略,旨在让应用程序即使在用户切换到其他应用或者锁屏后也能继续执行特定任务,如持续定位、音乐播放等。以下是对这一主题的详细探讨: 1. **iOS后台模式**:iOS提供了...

    iOS后台运行的几种方式例子

    5. **持续执行(延长的后台执行)**:尽管iOS不鼓励无限后台运行,但开发者可以通过巧妙设计,如使用定位服务或音频播放来模拟无限后台。然而,Apple对这种行为有严格的审查,过度使用可能会导致应用被拒或被用户...

    iOS后台运行

    2. **后台执行模式(Background Execution)**:在某些特定情况下,如音频播放、定位服务或VoIP通话,iOS允许应用在后台持续运行。这些应用可以在后台保持活动状态,执行代码并更新内容。 3. **后台任务...

    ios app 后台运行备份

    本篇文章将深入探讨iOS应用如何在后台执行任务,特别是进行数据备份。 首先,我们需要了解iOS的后台模式。iOS提供了几种后台模式,每种都有其特定用途: 1. **应用刷新**(Background Fetch):此模式下,系统会在...

    IOS 系统的后台持续定位

    在iOS系统中,后台持续定位是一项关键功能,尤其对于那些依赖实时地理位置信息的应用,如导航、运动追踪等。为了理解这一功能,我们首先需要探讨iOS的App生命周期和苹果的能源效率策略。 iOS的设计理念强调用户体验...

    Xamarin使用C#开发IOS程序-socket与突破3分钟后台运行限制

    B、ios由于是伪后台,当程序退回到后台,系统留给程序的可运行时间就只有3分钟。 过了3分钟,就会把这个程序的所有线程挂起(当然内部预留了长任务运行这一后招)。 经过多次试验后,可以借助着3分钟的长任务运行,...

    让iOS6后台更加人性化插件教程

    传统的iOS系统只能通过一系列图标来展示后台运行的应用程序,这种展示方式虽然直观,但信息量有限,并不能准确反映每个应用的当前状态。而Auxo通过卡片式设计,为每个后台应用提供了更加丰富的视觉信息。用户能够...

    ios后台运行

    在iOS平台上,应用程序的后台运行是一项关键特性,它允许用户在切换到其他应用或设备进入休眠状态时,某些特定任务仍然可以继续执行。标题"ios后台运行"和描述"ios后台长时间运行,退出后播放一个音频文件"揭示了...

    delphi ios后台运行BackgroundFetchDemo

    `Background Fetch`是iOS提供的一种有限度的后台执行机制,它允许系统在认为设备连接到电源且网络可用时,唤醒应用执行一小段代码。这使得开发者可以定期更新应用的数据,但需要注意的是,系统会根据设备状态和用户...

    ios 后台一直运行 demo audio 服务

    通过以上所述,我们可以看到,实现"ios 后台一直运行 demo audio 服务"需要对iOS的后台执行机制、AVFoundation框架以及音频会话管理有深入的理解。这不仅涉及到技术实现,还包含了用户体验和苹果的政策规定,是一个...

    OC-后台执行任务Processing

    在iOS开发中,后台执行任务是一项重要的技术,它允许应用程序在用户离开应用或者设备进入待机状态时继续处理一些必要的工作。"OC-后台执行任务Processing"这个主题主要涵盖的是Objective-C(OC)语言中如何在iOS环境...

    IOS应用进入后台继续更新数据

    1. **后台执行模式**:iOS提供了几种后台执行模式,允许应用在后台执行特定任务。这些模式包括: - `background fetch`:系统会在合适的时机唤醒应用,以便其获取新数据。 - `remote notifications`:接收到远程...

    后台播放音乐的ios示例程序

    首先,我们需要知道iOS系统提供了一种名为“后台模式”的机制,允许特定类型的应用在后台运行,包括音频播放。为了启用后台音乐播放,我们需要在项目的信息设置(Info.plist)中添加`UIBackgroundModes`键,并在其...

    iOS后台运行的类

    在iOS平台上,应用程序的后台运行能力受到严格的限制,这是为了优化设备性能和电池寿命。然而,开发者有时需要在后台执行一些任务,例如音乐播放、位置更新或上传/下载数据。本篇文章将深入探讨如何在iOS中实现后台...

    iOS 后台运行的方法

    在iOS平台上,应用程序的后台运行是一项关键特性,它允许应用在用户离开应用或者设备进入待机状态时继续执行特定任务。然而,与Android系统不同,iOS对于后台运行有着严格的限制和管理,以优化电池寿命和整体用户...

    ios播放器的后台播放功能

    它是iOS的`UIApplication`类的一部分,允许应用在后台执行一些任务。当用户退出应用或者系统需要回收资源时,应用可以注册一个后台任务,这样在一段时间内,即使应用被挂起,仍然可以继续执行特定的工作。对于音频...

Global site tag (gtag.js) - Google Analytics