2017-02-28 209 views
-2

我想運行後臺任務。用於檢查網絡連接,即使該應用程序在後臺3分鐘後停止後臺任務

-(void) beginBackgroundUploadTask 
{ 
    isBackGroundRunning = YES; 
    if(self.backgroundTask != UIBackgroundTaskInvalid) 
    { 
     [self endBackgroundUploadTask]; 
    } 

    self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 

     NSLog(@"Background Time Remaining :%f",[[UIApplication sharedApplication] backgroundTimeRemaining]); 

    }]; 
} 

-(void) endBackgroundUploadTask 
{ 
    [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask ]; 
    self. backgroundTask = UIBackgroundTaskInvalid; 
} 

-(void) initializeUpdateTimer 
{ 
    a= 0; 
    [self.updateTimer invalidate]; 
    self.updateTimer = [NSTimer scheduledTimerWithTimeInterval:5 
                  target:self 
                  selector:@selector(checkNetWorkStatus) 
                  userInfo:nil repeats:YES]; 
    [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 
     if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground){ 

      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 

       [[NSRunLoop currentRunLoop] addTimer:self.updateTimer forMode:NSDefaultRunLoopMode]; //NSDefaultRunLoopMode 
       [[NSRunLoop currentRunLoop] run]; 
      }); 

     } 
    }]; 
} 

initializeUpdateTimer功能時應用涉及到背景。 3分鐘後自動停止任務。 是否可以延長30分鐘的時間?

+0

您無法在後臺啓動計時器。 – matt

+0

@matt:是否有任何方法可以從至少30分鐘的背景中檢查網絡狀態。 –

+0

你爲什麼需要這樣做?如果您的應用程序處於後臺,它不會運行,並且網絡狀態對您無關緊要。如果您正在嘗試執行後臺上傳/下載或嘗試在後臺調用以執行網絡任務,那麼有很好的方法可以做到這一點。但是你的代碼不是這樣。 – matt

回答

0

在您的應用程序暫停後,Theres無法檢查Internet是否可用,通常iOS會在3分鐘內暫停應用程序,但取決於操作系統。但是,那裏有一個哈克的方式

  1. 如果你需要知道的是,是你的應用程序是醒着還是不要嘗試使用無聲推送通知,
  2. 如果您收到
  3. 無聲推送設置一個本地通知30或更多,如果你接收另一個靜默推送通知從其時間表中刪除本地通知,
  4. 如果靜默推送永不到來讓本地通知完成其工作。

其我的方式來實現您的要求,但它從來沒有推薦過,我也沒有。