zoukankan      html  css  js  c++  java
  • iOS 项目一直在后台执行

    我后来是这么解决不知道行不行,能够长期的在后台执行
    首先我在xx-info.plist 里的 "Required background modes" 里增加"App provides Voice over IP services"

    然后在delegate里增加下面代码,原理是进入后台时程序会在600秒那样结束任务,我做的就是在结束任务前新开一个任务。再结束旧任务,这样就一直的在后台执行,希望可能帮助到很多其它的人。我也查了非常久才找到这种方法的。


    UIBackgroundTaskIdentifier backgroundTaskIdentifier;
    02 UIBackgroundTaskIdentifier oldBackgroundTaskIdentifier;
    03  
    04 - (BOOL) isMultitaskingSupported{
    05      
    06     BOOL result = NO;
    07      
    08     if ([[UIDevice currentDevice]
    09           
    10          respondsToSelector:@selector(isMultitaskingSupported)]){ result = [[UIDevice currentDevice] isMultitaskingSupported];
    11          
    12     }
    13      
    14     return result;
    15      
    16 }
    17  
    18 - (void) timerMethod:(NSTimer *)paramSender{
    19     count++;
    20     if (count % 500 == 0) {       
    21         UIApplication *application = [UIApplication sharedApplication];
    22          
    23         //开启一个新的后台
    24          
    25         backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{
    26    
    27         }];
    28         //结束旧的后台任务
    29         [application endBackgroundTask:backgroundTaskIdentifier];
    30         oldBackgroundTaskIdentifier = backgroundTaskIdentifier;
    31     }
    32     NSLog(@"%ld",count);
    33 }
    34 - (void)applicationDidEnterBackground:(UIApplication *)application
    35 {
    36     if ([self isMultitaskingSupported] == NO){
    37          
    38         return; }
    39     //开启一个后台任务
    40      
    41     backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{       
    42     }];
    43     oldBackgroundTaskIdentifier = backgroundTaskIdentifier;
    44     if ([self.myTimer isValid]) {
    45         [self.myTimer invalidate];
    46     }
    47     self.myTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerMethod:) userInfo:nil repeats:YES];
    48 }
    49  
    50 - (void)applicationWillEnterForeground:(UIApplication *)application
    51 {
    52     if (backgroundTaskIdentifier != UIBackgroundTaskInvalid){
    53         [application endBackgroundTask:backgroundTaskIdentifier];
    54         if ([self.myTimer isValid]) {
    55             [self.myTimer invalidate];
    56         }
    57     }
    58 }
    59  
    60 - (void)applicationWillEnterForeground:(UIApplication *)application
    61 {
    62     if (backgroundTaskIdentifier != UIBackgroundTaskInvalid){
    63         [application endBackgroundTask:backgroundTaskIdentifier];
    64         if ([self.myTimer isValid]) {
    65             [self.myTimer invalidate];
    66         }
    67     }
    68 }

  • 相关阅读:
    MVC调用SVC无法找到资源解决问题
    动态更改iframe src
    http改成https wcf 配置更改
    Nuget 管理报repositories.config 访问路径被拒绝 解决办法
    如何在水晶报表中动态添加字段
    VS2.0控件之日历《Calendar》C#
    C#操作Excel全源码
    如何向水晶报表数据源中的存储过程传参数……
    公式的典型用途
    水晶报表公式使用必读
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5399269.html
Copyright © 2011-2022 走看看