2017-02-28 24 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

あなたのアプリが一時停止されたら、インターネットが利用可能かどうかを確認する方法はありません。通常、iOSはアプリを3分で一時停止しますが、OSによって異なります。しかし、theresの

  1. ハック方法をあなたはサイレントプッシュが30以上のローカルの通知を設定した場合に受信した場合、アプリケーションが
  2. 、サイレントプッシュ通知を使用してみてください目覚めかではありません、ということを知る必要がある場合別のサイレントプッシュ通知を受信します。ローカル通知がスケジュールから削除されます。
  3. サイレントプッシュが到着しない場合は、ローカル通知がそのジョブを実行します。

あなたの要件を実装するための私のやり方ではありません。

関連する問題