2017-06-15 6 views
0

30分ごとに実行するように設定されたAppDelegate内のFinishLaunchingイベントにタイマーがあります。 アプリケーションをバックグラウンドに移動したり、デバイスによって中断された場合でも、タイマーは停止しますが、フォアグラウンドに戻るとどうなりますか。タイマーは停止したところから続行されますか?Xamarin iOS:iOSタイマーは、バックグラウンドからフォアグラウンドに移動した後、同じ場所で続行しますか?

など。アプリケーションの開始から10分後、私はアプリケーションがバックグラウンド/サスペンドするまで切り替えました。 10分後、私はそれを元に戻す。 10分後にタイマーが起動するか、もう一度開始されますか(30分)。

downloadTimer = NSTimer.CreateRepeatingScheduledTimer(30, DownloadEntityFromServer); 

    NSRunLoop.Current.AddTimer(downloadTimer, NSRunLoopMode.Default); 

答えて

0

アプリケーションが中断されてもタイマーは停止しません。それは発砲を続けます。 タイマーを一時停止して再開する方法はありません。代わりに、次の回避策を参照してタイマーを一時停止し、再開してください。

public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate 
    { 
     NSTimer downloadTimer; 
     DateTime date; 
     TimeSpan RemainingMinutes; 
     bool isBackground; 
     public override bool FinishedLaunching(UIApplication app, NSDictionary options) 
     { 
      global::Xamarin.Forms.Forms.Init(); 
      LoadApplication(new App()); 
      downloadTimer = NSTimer.CreateRepeatingScheduledTimer(new TimeSpan(0,30,0), DownloadEntityFromServer); 
      NSRunLoop.Current.AddTimer(downloadTimer, NSRunLoopMode.Default); 
      return base.FinishedLaunching(app, options); 
     } 


     public override void DidEnterBackground(UIApplication uiApplication) 
     { 
      RemainingMinutes = (DateTime.Now - date); 
      isBackground = true; 
      base.DidEnterBackground(uiApplication); 
     } 

     public override void WillEnterForeground(UIApplication uiApplication) 
     { 
      isBackground = false; 
      CreateTemporaryTimer(); 
      base.WillEnterForeground(uiApplication); 
     } 

     void CreateTemporaryTimer() 
     { 
      NSTimer tempTimer = NSTimer.CreateScheduledTimer(new TimeSpan(0,30-RemainingMinutes.Minutes,0), TemporaryTimerTicks); 

     } 

     void TemporaryTimerTicks(NSTimer obj) 
     { 
      downloadTimer.Invalidate(); 
      downloadTimer = NSTimer.CreateRepeatingScheduledTimer(new TimeSpan(0,30,0), DownloadEntityFromServer); 
     } 

     void DownloadEntityFromServer(NSTimer obj) 
     { 
      date = DateTime.Now; 
      if (!isBackground) 
      { 
       // Write your stuff 
      } 
     } 
} 
+0

設定されていない場合、タイマーはどうなりますか? – LittleFunny

+0

@LittleFunny私はコンテンツを変更しました。これを試すことができますか?このコードでは、アプリが10分で中断され、アプリが再開されると、30分ではなく20分でイベントがトリガーされます。 – VenkyDhana

+0

私は、Temporary Timer TickメソッドがDownloadEntityFromServerを呼び出し、NSTimer.CreateRepeatingScheduledTimerを呼び出すべきだと思います。 – LittleFunny

関連する問題