我在AppDelegate内的FinishLaunching事件中有一个计时器,它被设置为每30分钟执行一次。 如果我将应用程序移动到后台或甚至被设备挂起,我知道Timer会停止,但如果它返回到前台会发生什么。定时器是否会从停止的地方继续。
E.g。从应用程序启动10分钟后,我切换到应用程序,直到它有背景/暂停。 10分钟后,我将其切换回来。计时器会在10分钟后开火还是重新开始(30分钟)。
downloadTimer = NSTimer.CreateRepeatingScheduledTimer(30, DownloadEntityFromServer);
NSRunLoop.Current.AddTimer(downloadTimer, NSRunLoopMode.Default);
答案 0 :(得分: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
}
}
}