app进入后台申请10分钟活跃时间-b

Posted qigemingnan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了app进入后台申请10分钟活跃时间-b相关的知识,希望对你有一定的参考价值。

ios允许长时间在后台运行的情况有7种:
  audio
  VoIP
  GPS
  下载新闻
  和其它附属硬件进行通讯时
  使用蓝牙进行通讯时
  使用蓝牙共享数据时
  除以上情况,程序退出时可能设置短暂运行10分钟
  让程序退出后台时继续运行10分钟
  在XXAppDelegate中增加:UIBackgroundTaskIdentifier bgTask;

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    bgTask = [application beginBackgroundTaskWithExpirationHandler:^{

      // 10分钟后执行这里,应该进行一些清理工作,如断开和服务器的连接等
       // ...
      // stopped or ending the task outright.
       [application endBackgroundTask:bgTask];
      bgTask = UIBackgroundTaskInvalid;
  }];
  if (bgTask == UIBackgroundTaskInvalid) {
      NSLog(@"failed to start background task!");
  }
  // Start the long-running task and return immediately.
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
      // Do the work associated with the task, preferably in chunks.
      NSTimeInterval timeRemain = 0;
      do{
          [NSThread sleepForTimeInterval:5];
          if (bgTask!= UIBackgroundTaskInvalid) {
              timeRemain = [application backgroundTimeRemaining];
              NSLog(@"Time remaining: %f",timeRemain);
          }
      }while(bgTask!= UIBackgroundTaskInvalid && timeRemain > 0); 
       // 如果改为timeRemain > 5*60,表示后台运行5分钟       // done!       // 如果没到10分钟,也可以主动关闭后台任务,但这需要在主线程中执行,否则会出错       dispatch_async(dispatch_get_main_queue(), ^{           if (bgTask != UIBackgroundTaskInvalid)           {              // 和上面10分钟后执行的代码一样               // ...               // if you don‘t call endBackgroundTask, the OS will exit your app.              [application endBackgroundTask:bgTask];               bgTask = UIBackgroundTaskInvalid;           }       });   }); } - (void)applicationWillEnterForeground:(UIApplication *)application {   // 如果没到10分钟又打开了app,结束后台任务   if (bgTask!=UIBackgroundTaskInvalid) {       [application endBackgroundTask:bgTask];      bgTask = UIBackgroundTaskInvalid;   } }
 

 后台时,如果某些代码你不希望执行,可以加以下条件:

UIApplication *application = [UIApplication sharedApplication];
if( application.applicationState == UIApplicationStateBackground) {
    return;
}
 

有的app虽然我们不允许通知,但还是会弹出消息,应该是设置了定时器,到某一时间就让程序后台运行一会,从服务器更新数据,然后显示出来。

以上是关于app进入后台申请10分钟活跃时间-b的主要内容,如果未能解决你的问题,请参考以下文章

ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方式

ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案

iOS 必知必会 - APNs篇

iOS 程序进入后台,包含用户上拉快捷菜单导致程序失去活跃的研究

在后台运行应用程序超过 10 分钟

安卓程序进入后台和前台的判断