アプリケーションが中断されてもタイマーは停止しません。それは発砲を続けます。 タイマーを一時停止して再開する方法はありません。代わりに、次の回避策を参照してタイマーを一時停止し、再開してください。
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
}
}
}
設定されていない場合、タイマーはどうなりますか? – LittleFunny
@LittleFunny私はコンテンツを変更しました。これを試すことができますか?このコードでは、アプリが10分で中断され、アプリが再開されると、30分ではなく20分でイベントがトリガーされます。 – VenkyDhana
私は、Temporary Timer TickメソッドがDownloadEntityFromServerを呼び出し、NSTimer.CreateRepeatingScheduledTimerを呼び出すべきだと思います。 – LittleFunny