zoukankan      html  css  js  c++  java
  • 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虽然我们不允许通知,但还是会弹出消息,应该是设置了定时器,到某一时间就让程序后台运行一会,从服务器更新数据,然后显示出来。

  • 相关阅读:
    Android 在资源文件(res/strings.xml)定义一维数组,间接定义二维数组
    Android 设计模式之MVC模式
    Android Studio 1.0首次安装遇到的问题,无法下载SDK
    android 项目中规范使用SharedPreferences
    Android 在布局容器中动态添加控件
    Android ble 蓝牙4.0 总结一
    Mac Android签名生成keystore
    Android ndk 加载简单的gif 图像
    Android EventBus
    c语言内存
  • 原文地址:https://www.cnblogs.com/isItOk/p/5891026.html
Copyright © 2011-2022 走看看